【问题标题】:How to log unhandled exception in .net core如何在.net核心中记录未处理的异常
【发布时间】:2018-05-20 13:44:25
【问题描述】:

使用 web api 2.0 中的 ELMAH 功能和集中式日志记录和错误处理,运行时调用日志记录模块并决定是否可以处理,然后调用处理程序,否则只记录它.. 如何在 web api 核心中添加此功能。因为我们没有内置的集中式未处理日志记录功能..

我得到的一种方法是使用 ExceptionHandler 中间件,当它被调用时,获取异常并记录它或发送电子邮件..但是如果处理程序没有被调用..如何记录那些未处理的异常?

【问题讨论】:

    标签: c# asp.net-core error-handling elmah


    【解决方案1】:

    中间件可能是一种可行的方法。我在这里写了一个指南:Error Logging Middleware in ASP.NET Core

    我可能会将Microsoft.Extensions.Logging 与 Serilog、NLog 或 log4net 等日志记录框架结合使用。

    【讨论】:

    • 谢谢Thomas,这是否取决于错误日志记录和处理中间件的注册顺序?
    • 如果添加错误日志中间件,您应该在其他处理异常的中间件之后添加它。您希望您的中间件尽可能靠近抛出的异常运行,因为其他中间件可能会“吞下”异常。
    • “虽然在 Startup.cs 中调用 UseMiddleware 方法确实有效,但创建自定义 Use-method 被认为是一种好习惯:” - ...为什么会这样?当开发人员在没有任何理由的情况下抛出“这是最佳实践......”时,我无法忍受。为什么引入无用的包装方法是“最佳实践”?我很好在这里被证明是错误的,我只是没有看到它。也就是说,这篇文章很有用。
    • 好点?将确保更新帖子。
    【解决方案2】:

    尝试将 Elmah 的 this port 转换为 .NET Core。

    services.AddElmah(); // in ConfigureServices 
    
    app.UseElmah(); // in Configure, before UseMvc()
    

    【讨论】:

    • 只是一个简单的问题,我是否必须手动将 try catch 块放在任何地方并使用 HttpContext.RiseError() 将异常记录到 Elmahcore?或者我会在配置后自动从我的代码中捕获抛出的异常?
    【解决方案3】:

    如果您已经在使用 Application Insights,则可以在门户中设置警报。 https://docs.microsoft.com/en-us/azure/azure-monitor/learn/tutorial-alert

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 2017-10-08
      相关资源
      最近更新 更多