c# - 如何在 dot net core 中设置 log4net 以记录所有未处理的异常?
问题描述
我正在使用此处建议的实现将 log4net 添加到当前的点网核心项目,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
构造函数中相同的方法不起作用。错误与上面提到的相同。
解决方案
要在 .net Core 中记录任何未处理的异常,您必须创建一个异常过滤器,如下所示:
public class LogFilter : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext Context)
{
//Log what you need here, the exception is in Context.Exception
Context.ExceptionHandled = true;
}
}
并注册过滤器:
public void ConfigureServices(IServiceCollection Services)
{
// Add framework services.
Services.AddMvc(o =>
{
o.Filters.Add(new LogFilter());
});
}
推荐阅读
- github - How can I let Hugo detect theme?
- java - 文字参数在内存中保存在哪里,它们在 Java 中存在多长时间?
- c# - 查找并列出服务器的邀请
- python - 从 setup.py 将参数传递给 pytest
- excel - Excel使用VBA将单元格数据从一张表复制到另一张表
- javascript - CreateAsyncThunk 错误:操作必须是普通对象。使用自定义中间件进行异步操作
- google-apps-script - 如何使用应用程序脚本将相同的条件格式规则应用于 Google 工作表中的多个列?
- python - 在 django 模板中,如何根据正文部分中的自定义标记参数动态更新标题部分
- oauth2-playground - OAuth 2.0:“gmail.send”范围无法验证 smtp.gmail.com 服务器
- javascript - 立即填充第二个下拉值