【发布时间】:2020-09-30 13:04:26
【问题描述】:
我正在使用此处建议的实现将 log4net 添加到当前的 dot net core 项目 https://thecodebuzz.com/log4net-file-logging-console-logging-asp-net-core/(这是使用 Microsoft.Extensions.Logging.Log4Net.AspNetCore),如何设置 log4net 来记录所有未处理的异常?我还没有想出办法做到这一点。请问有什么指点吗?
后期编辑:
public class LogFilter : ExceptionFilterAttribute
{
public readonly ILogger _logger;
public LogFilter(ILogger logger)
{
_logger = logger;
}
// public Logger Logger { get; set; }
public override void OnException(ExceptionContext Context)
{
//Log what you need here, the exception is in Context.Exception
_logger.LogError(Context.Exception, null);
Context.ExceptionHandled = true;
}
}
我尝试添加一个这样的 LogFilter 类,并在 Startup.cs 中进行此更改:
services.AddMvc(o =>
{
o.Filters.Add(new LogFilter(Logger));
});
在 ConfigureServices 方法以及 public ILogger Logger { get; } 属性中,但我得到的错误是关于 _logger 在我的 LogFilter 类中为空。
稍后更新(旁注):
在控制器中,我可以通过添加一个属性来让 _logger 工作:
private readonly ILogger _logger;
并在构造函数中传递它:ILogger<MyController> logger 但在 FilterClass 中遵循与构造函数中的ILogger<ControllerBase> logger 相同的方法不起作用。
错误与上面提到的相同。
【问题讨论】:
-
这能回答你的问题吗? log4net log all unhandled application errors
-
谢谢,但与 .net 框架相比,在 Dot net Core 中的工作方式似乎不同,我们在 dot net core 中没有 Application_Error 错误。我正在考虑...
-
您是否尝试过调试过滤器以检查它是否被执行?
-
你是对的。它没有被执行。但这会在 UI 中返回到我的页面:
{ type: "https://tools.ietf.org/html/rfc7231#section-6.5.4", title: "Not Found", status: 404, traceId: "|a704a3ee-4d17438a72465c63." }显示我们确实有一个错误......我想我知道为什么,检查并会更新。 -
404 响应不是未处理的异常,是状态代码页,不会引发异常。检查这个答案:stackoverflow.com/questions/56731883/…
标签: c# exception logging .net-core unhandled