.Net Core EventLog - 覆盖未处理的异常写入应用程序日志
.Net Core EventLog - override unhandled exception are written to Application log
我已经在我的 .Net Core 5.0 应用程序中配置了 EventLog,以将应用程序事件记录到自定义事件日志中:
public Startup (IConfiguration configuration)
{
this.configuration = configuration;
this.logger = LoggerFactory.Create(logging=>{
logging.AddConsole();
logging.AddEventLog(settings=> {
settings.LogName = configuration["EventLogName"];
settings.SourceName = configuration["EventLogSourceName"];
settings.Filter = (category, level) => level >= LogLevel.Trace;
});
}).CreateLogger("Stage server logger");
}
我在应用程序设置中的日志记录配置:
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
},
"EventLog": {
"LogLevel": {
"Default": "Information"
}
}
}
一切正常,但一些消息(特别是未处理的异常)被写入“应用程序”日志而不是配置 [“EventLogName”] 日志。知道如何配置应用程序以将应用程序的所有消息记录到配置 ["EventLogName"] 日志吗?
非常感谢
我看到您在 startup.cs
中创建了 Logger
的实例。我想你在你的 DI 中注册了它?如果是,您看不到所有来源的日志,因为它们可能没有使用您的 Logger
实例。您只是在配置特定的 Logger
,而不是 LoggerFactory
。
你能在 program.cs
:
中尝试这样的事情吗
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostBuilder, logBuilder) => {
logBuilder.AddConsole();
logBuilder.AddEventLog(set => {
set.LogName = hostBuilder.Configuration["EventLogName"];
set.SourceName = hostBuilder.Configuration["EventLogSource"];
set.Filter = (category, level) => level >= LogLevel.Trace;
});
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
这样,我也在为我不控制的代码配置 Logger
- 依赖项。
但是如果你想要一个最小的解决方案来修复未处理的异常,快速修复将创建一个带有 try-catch 的中间件,并通过 DI 注入的特定 Logger
记录异常重新抛出。
我已经在我的 .Net Core 5.0 应用程序中配置了 EventLog,以将应用程序事件记录到自定义事件日志中:
public Startup (IConfiguration configuration)
{
this.configuration = configuration;
this.logger = LoggerFactory.Create(logging=>{
logging.AddConsole();
logging.AddEventLog(settings=> {
settings.LogName = configuration["EventLogName"];
settings.SourceName = configuration["EventLogSourceName"];
settings.Filter = (category, level) => level >= LogLevel.Trace;
});
}).CreateLogger("Stage server logger");
}
我在应用程序设置中的日志记录配置:
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
},
"EventLog": {
"LogLevel": {
"Default": "Information"
}
}
}
一切正常,但一些消息(特别是未处理的异常)被写入“应用程序”日志而不是配置 [“EventLogName”] 日志。知道如何配置应用程序以将应用程序的所有消息记录到配置 ["EventLogName"] 日志吗? 非常感谢
我看到您在 startup.cs
中创建了 Logger
的实例。我想你在你的 DI 中注册了它?如果是,您看不到所有来源的日志,因为它们可能没有使用您的 Logger
实例。您只是在配置特定的 Logger
,而不是 LoggerFactory
。
你能在 program.cs
:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostBuilder, logBuilder) => {
logBuilder.AddConsole();
logBuilder.AddEventLog(set => {
set.LogName = hostBuilder.Configuration["EventLogName"];
set.SourceName = hostBuilder.Configuration["EventLogSource"];
set.Filter = (category, level) => level >= LogLevel.Trace;
});
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
这样,我也在为我不控制的代码配置 Logger
- 依赖项。
但是如果你想要一个最小的解决方案来修复未处理的异常,快速修复将创建一个带有 try-catch 的中间件,并通过 DI 注入的特定 Logger
记录异常重新抛出。