27

ASP MVC アプリでユーザー アクティビティをログに記録するための適切な戦略はありますか? (ActionFilters/HTTPModules)。

最後のユーザー アクティビティ (「23 分前に表示された StackOverflow」など) のようなもの、さらにはどのページとコントローラーが使用されたか、さらにどのボタンやリンクがクリックされたかをさらにプッシュします。

ELMAH をインストールしましたが、私が知る限り、エラー ログ用です。

PD: Google アナリティクスはオプションではありません。

4

4 に答える 4

49

警告:これは2009年にMVC .NET RC1用に作成されたものであり、構文的に正しくない可能性があります。

アクションフィルター属性はこれに最適です[YourAttributeName]。コントローラーの上部にを呼び出すだけです(または、他のコントローラーが継承するアプリケーションコントローラーがある場合は、アプリケーションで1回だけ必要です)。

例えば:

namespace the_name_space
{
    [Log]
    public class ApplicationController : Controller
    {

この時点から、この属性は、コントローラーで各アクションが実行される前に呼び出されます[Log]。同じ方法でアクションの直前に呼び出すことにより、アクションのみでこれを指定することもできます。

OnResultExecuting必要なロギング機能を取得するには、ほとんどの場合、とをオーバーライドする必要がありますOnResultExecuted。どちらもかなり自明です。

例えば:

public class LogAttribute : ActionFilterAttribute
{
    protected DateTime start_time;

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        start_time = DateTime.Now;
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        RouteData route_data = filterContext.RouteData;
        TimeSpan duration = (DateTime.Now - start_time);
        string controller = (string)route_data.Values["controller"];
        string action = (string)route_data.Values["action"];
        DateTime created_at = DateTime.Now;
        //Save all your required values, including user id and whatnot here.
        //The duration variable will allow you to see expensive page loads on the controller, this can be useful when clients complain about something being slow.
    }
}
于 2009-12-01T05:38:34.303 に答える
23

これを行うための非常に簡単な方法を説明しているRion Williamsによる次の 2 つの投稿を偶然見つけました。

ASP.NET MVC ActionFilters を使用した監査証跡の実装

ASP.NET MVC で ActionFilters を使用して高度な監査証跡を作成する

高度な投稿は、リクエストのデータを保存し、そのデータをさらにフィルタリングできるため、非常に優れています。

これを今すぐアプリに実装します。

于 2013-05-28T20:39:09.173 に答える
6

PostSharpアスペクトを使用してロギングを実行してみると、マルチキャスト機能がそのような場合に役立つ場合があります。それがオプションでない場合は、おそらくモジュールが最も簡単に実装できます (パイプラインのその時点で必要なユーザー情報を取得できると仮定します)。

于 2009-11-30T22:20:13.627 に答える
1

@Roryのアイデアは素晴らしいです。PostSharp はまさにこれに必要なものです。ASP.net Health Monitoringと組み合わせることを検討してください。

于 2009-12-01T01:27:59.097 に答える