ASP.NET MVCアプリケーションでのユーザーアクティビティのログ
-
10-07-2019 - |
質問
ASP MVCアプリでユーザーアクティビティを記録する良い戦略はありますか? (ActionFilters / HTTPModules)。
最後のユーザーアクティビティ(StackOverflow" 23分前に見られるように)のようなもの、使用されたページとコントローラー、さらにクリックされたボタンまたはリンクをさらにプッシュします。
ELMAHがインストールされていますが、エラーログのみを知っています。
PD:Google Analyticsはオプションではありません。
解決
PostSharp アスペクトを使用してロギングを実行してみてください。マルチキャスト機能があります。そのような何かのために便利になります。オプションでない場合は、おそらくモジュールが最も簡単に実装できます(パイプラインのその時点で必要なユーザー情報を取得できると仮定します)。
他のヒント
警告:これは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.
}
}
この2つの投稿を Rion Williams が偶然見つけました。 / p>
監査証跡の実装ASP.NET MVC ActionFiltersの使用
ASP.NET MVCでActionFiltersを使用して高度な監査証跡を作成する
リクエストのデータを保存し、そのデータをさらにフィルタリングできるため、高度な投稿は本当に素晴らしいです。
今すぐアプリに実装します。
@Roryのアイデアは優れています。 PostSharpはこれに必要なものです。 ASP.netとの結合を検討することをお勧めします。ヘルスモニタリング