如何在 dot net core 中设置 log4net 以记录所有未处理的异常?
How can I set up log4net in dot net core to log all unhandled exceptions?
我正在使用此处建议的实现将 log4net 添加到当前的 dot net 核心项目,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 class,再加上 Startup.cs 中的这个变化:
services.AddMvc(o =>
{
o.Filters.Add(new LogFilter(Logger));
});
在 ConfigureServices 方法以及 public ILogger Logger { get; }
属性 中,但我得到的错误是关于 _logger 在我的 LogFilter class.
中为 null
稍后更新(边注):
在控制器中,我可以通过添加 属性 让 _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());
});
}
我正在使用此处建议的实现将 log4net 添加到当前的 dot net 核心项目,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 class,再加上 Startup.cs 中的这个变化:
services.AddMvc(o =>
{
o.Filters.Add(new LogFilter(Logger));
});
在 ConfigureServices 方法以及 public ILogger Logger { get; }
属性 中,但我得到的错误是关于 _logger 在我的 LogFilter class.
稍后更新(边注):
在控制器中,我可以通过添加 属性 让 _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());
});
}