使用log4net,我们希望记录对ASP.NET MVC控制器操作方法的所有调用。
日志应包含有关传递给控制器的任何参数的信息。
我们希望使用Interceptors via Unity的AoP方法,而不是在每个动作方法中对此进行手工编码。
我们已经使用了一些其他使用接口的类(使用InterfaceInterceptor
)。但是,我们不确定如何继续使用我们的控制器。我们是应该稍微重新使用它们来使用接口,还是有更简单的方法?
VirtualMethodInterceptor似乎是正确的方法,但是使用此方法会导致以下异常:
System.ArgumentNullException: Value cannot be null. Parameter name: str at System.Reflection.Emit.DynamicILGenerator.Emit(OpCode opcode, String str) at Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.PreBuildUp(IBuilderContext context) at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
答案 0 :(得分:1)
你见过 this [link broken]
以下是使用企业库日志记录应用程序阻止的LogFilterAttribute
来记录邮件的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 }
});
}
}
答案 1 :(得分:0)
不完全是您的要求,但您可能需要考虑log4postsharp。也许你还需要this,但我无法确定,因为到目前为止我还没有使用ASP.Net MVC