1

使用 log4net,我们希望记录对 ASP.NET MVC 控制器操作方法的所有调用。

日志应包含有关传递给控制器​​的任何参数的信息。

我们希望通过 Unity使用带有拦截器的 AoP 方法,而不是在每个动作方法中手动编码。

我们已经将它与其他一些使用接口的类一起使用(使用InterfaceInterceptor)。但是,我们不确定如何继续使用我们的控制器。我们是否应该稍微修改它们以使用接口,还是有更简单的方法?

编辑

VirtualMethodInterceptor似乎是正确的方法,但是使用它会导致以下异常:

System.ArgumentNullException:值不能为空。
参数名称: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 提供的损坏/丢失的博客文章的摘录

这是一个LogFilterAttribute使用Enterprise Library Logging Application BlockLogWriter记录消息。

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 回答