2010-12-12 25 views
3

私はすでに答えを知っているかもしれないと思うが、ここに行く。特定のメソッドが呼び出されたときにログに記録したいのですが、これらのメソッドでOutputCache属性を使用してパフォーマンス上のメリットを得ているため、私は壊れています。メソッドが何度も呼び出されると、ASP.NET MVCは以前の呼び出しからHTMLを返しますが、キャッシュは期限切れではなく、素早く高速です。しかし、そのメソッド内のどのロギングコマンドも実行されません。OutputCacheとASP.NET MVC 2.0のログイン

[OutputCache]を削除しなくても、それらのメソッドが呼び出されたときに記録するようにログを記録する方法はありますか? [OutputCache]属性は、以前の出力がキャッシュされたときにメソッドの実行を基本的に短絡しても、属性ベースのロギングメカニズムは何とか​​動作しますか?

おかげで、 ジェフ

答えて

1

ダーリンディミトロフは、Application_BeginRequestApplication_EndRequestの方法を使用してください。

この

は、あなたがそれを行うだろうかです:バージョンがキャッシュから提供されているかどうか

protected void Application_BeginRequest() 
{ 
    var routeCollection = RouteTable.Routes; 
    var routeData = routeCollection.GetRouteData(new HttpContextWrapper(HttpContext.Current)); 

    // Log 
    Debug.WriteLine("Invoking " + routeData.Values["Controller"] + "::" + routeData.Values["Action"]); 
} 

protected void Application_EndRequest() 
{ 
    // Log 
    Debug.WriteLine("EndRequest"); 
} 

これらの方法に関係なく呼び出されます。

+0

回答者のおかげで、非常に役に立ちました!私は、モデルバインドに依存していた入力パラメータ値にアクセスすることはできないと思っていますが、このテクニックを利用することはできます。おそらく、そのようなメソッドの新しい属性を実装し、Application_BeginRequestのこれらのメソッドだけに着信呼び出しを記録することもできます。 – blaster

2

アクションが実行される前と後のあなたは情報をログに記録するGlobal.asaxApplication_BeginRequestApplication_EndRequestイベントを使用することができます。これらのイベントは、[OutputCache]属性で装飾されたコントローラーアクションであっても発生します。

関連する問題