使用Ninject在MVC.NET上使用Log4Net

时间:2011-08-04 09:44:34

标签: asp.net-mvc log4net ninject

1 个答案:

答案 0 :(得分:0)

注入ILogILogger实例不会隐式注册任何类型的异常处理程序。它只是让您访问记录器。您仍然需要告诉它记录什么以及何时记录它。

如果要测试配置,请从控制器的某个操作进行日志记录调用,或使用其中一个OnAction事件调用程序。这可能应该做你想要的:

public class MyController : Controller
{
    protected override void OnActionExecuted(ActionExecutedContext context)
    {
        if (Logger != null)
        {
            string message = string.Format("Action executed: {0}.{1}",
                context.ActionDescriptor.ControllerDescriptor.ControllerName,
                context.ActionDescriptor.ActionName);
            Logger.Log(typeof(MyController), log4Net.Core.Level.Trace,
                message, context.Exception);
        }
        base.OnActionExecuted(context);
    }

    [Inject]
    public ILogger Logger { get; set; }
}

这将记录每个控制器操作 - 包括异常。如果您只关心异常,请在登录前检查context.Exceptioncontext.ExceptionHandled属性,或者更好地编写自定义ActionFilter来执行此操作。