【问题标题】:How do I set up log4net for Asp.NET MVC application如何为 Asp.NET MVC 应用程序设置 log4net
【发布时间】:2026-02-16 22:20:04
【问题描述】:

我们有第一个 MVC 应用程序,我正在徘徊那里有什么特殊考虑。在常规的 Web 表单应用程序中,我们几乎只是在页面后面的代码中使用 try catch 块包装事件。但就助手、控制器、路由等而言,mvc 似乎不太清楚。我应该在哪里确保有日志记录。

【问题讨论】:

    标签: asp.net-mvc logging log4net


    【解决方案1】:

    通常您会在控制器操作中应用日志记录。您还可以从 HandleError 属性派生以添加错误日志记录,以及创建自定义操作/结果过滤器以自动化某些类型的日志记录。使用这样的过滤器,您可以将其应用于您的基本控制器,并为所有操作提供一些基本的使用记录/工具。

    如果您使用控制器工厂、动作调用程序或模型绑定器自定义框架,您也可以在那里应用日志记录。当然,这并没有说明如何将日志记录应用到您的实际模型(域对象、外部服务、持久性和数据库、安全性等)。

    【讨论】:

    • 我们通常(在 WebForm 应用程序中)也会在 Global.asax 中记录 Application_Error 事件。这是否也适用于 MVC 或者是否有更“合适”的地方来处理所有未处理的异常?
    • Application_Error 非常适合全面的异常日志记录。事实上,我更喜欢继承 HandleError,因为它还会在不直接处理 Web 请求的线程中运行的代码中记录异常(例如 Application_Start 中的代码)。
    【解决方案2】:

    在您的 Global.asax.cs 文件中:

    protected void Application_Error(object sender, EventArgs e)
    {
        _logger.Error("Unhandled exception", Server.GetLastError());
    }
    

    【讨论】: