web-dev-qa-db-ja.com

ASP.NETMVCアプリケーションでのユーザーアクティビティのログ

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

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

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

PD:GoogleAnalyticsはオプションではありません。

24
JOBG

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

6
Rory

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

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

例えば:

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

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

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

例えば:

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.
    }
}
46
Jay

Rion Williams によるこれらの2つの投稿に偶然出くわしました。これは、これを行う非常に簡単な方法を説明しています。

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

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

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

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

21

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

2
stimms