Gen*_*ari 3 error-handling nlog .net-core asp.net-core microsoft-extensions-logging
每当我们的 API 中发生错误时,我们最终都会因为一个错误而收到多封电子邮件。基于日志消息;我们可以看到这些其他电子邮件似乎正在生成,因为各种 Microsoft 库正在调用类似_logger.LogError我们自己的 _ 的东西logger.LogError,这在我们处理错误时发生。
例如,当数据库超时时,我们会看到来自这些不同类别的 4 封电子邮件:
最后一个是唯一一个具有我们自己的错误格式并包含有用信息(例如当前用户等)的一个。其他的仅包含堆栈跟踪,该跟踪已经包含在我们自己的格式化电子邮件中。
我们无法确定这些其他日志消息来自哪里;但我能想到的最有可能的是,在微软的库中,它们正在调用_logger.LogError(),而我们自己的 NLog 配置正在处理 ; 的所有实例LogError。而不是只处理我们自己的事情。
我们如何防止这些其他日志语句被记录,特别是通过电子邮件发送给我们?
这是我们在 Program.cs 中的设置:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
})
.UseNLog();
Run Code Online (Sandbox Code Playgroud)
您可以在 .NET Core 中过滤此内容 - 因为您使用 Microsoft.Extensions.Logging 集成,并且 Microsoft 将消息发送到该集成 - 以及在 NLog 中。
修改您的配置,例如appsettings.json。例如,对于所有 Microsoft.* 至少有一个错误,对于 Microsoft.EntityFrameworkCore.* 至少有一个警告
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Trace",
"Microsoft": "Error",
"Microsoft.EntityFrameworkCore": "Warning"
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这不是 NLog 特定的,因此您不能使用 NLog 级别名称。可能的级别名称
请在此处阅读有关此方法的更多信息。
或者您可以在 NLog 配置中进行配置。
在 NLog.config 中,编辑<rules>。这些规则是从上到下处理的。
name(*允许)writeTo属性,日志将被丢弃final="true"匹配事件,则不会处理下一条规则。例如:
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Trace",
"Microsoft": "Error",
"Microsoft.EntityFrameworkCore": "Warning"
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关 nlog.config 规则的信息。
这也可以通过代码中的相同方法实现,请参见此处。
| 归档时间: |
|
| 查看次数: |
2307 次 |
| 最近记录: |