1

log4net を使用して、ASP.NET MVC コントローラー アクション メソッドへのすべての呼び出しをログに記録します。

ログには、コントローラーに渡されたすべてのパラメーターに関する情報が含まれている必要があります。

各アクション メソッドでこれを手作業でコーディングするのではなく、 Unity を介してインターセプターを使用した AoP アプローチを使用したいと考えています。

これは、インターフェースを使用する他のいくつかのクラスで既に機能しています ( を使用InterfaceInterceptor)。ただし、コントローラーの処理方法がわかりません。インターフェイスを使用するためにそれらを少し作り直す必要がありますか、それとももっと簡単な方法がありますか?

編集

VirtualMethodInterceptorは正しいアプローチのようですが、これを使用すると次の例外が発生します。

System.ArgumentNullException: 値を null にすることはできません。
パラメータ名:str
   System.Reflection.Emit.DynamicILGenerator.Emit (OpCode オペコード、文字列 str) で
   Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.PreBuildUp (IBuilderContext コンテキスト) で
   Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp (IBuilderContext コンテキスト) で
4

2 に答える 2

1

これ を見たことがありますか[リンク切れ]

以下は、David Hayden の厚意による壊れた/欠落したブログ投稿からの抜粋です。

メッセージのロギングにEnterprise Library Logging Application BlockLogFilterAttributeを使用する を次に示します。LogWriter

public class LogFilterAttribute : ActionFilterAttribute
{
    public LogWriter Logger { get; set; }
 
    public string Category { get; set; }
 
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string message = string.Format(
            "{0} ActionMethod on {1}Controller executing...",
            filterContext.ActionDescriptor.ActionName,
            filterContext.ActionDescriptor.ControllerDescriptor.ControllerName);
 
        var category = Category ?? "General";
 
        Logger.Write(new LogEntry {
            Message = message,
            Categories = new[] { category }
        });
    }
}
于 2009-08-27T13:48:22.630 に答える
0

正確にはあなたが求めているものではありませんが、log4postsharpを検討することをお勧めします。これも必要になるかもしれませんが、これまでASP.Net MVCを使用していなかったため、はっきりとはわかりません。

于 2009-08-29T18:12:32.917 に答える