Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net core .Net核心事件日志-覆盖未处理的异常将写入应用程序日志_.net Core_Custom Eventlog - Fatal编程技术网

.net core .Net核心事件日志-覆盖未处理的异常将写入应用程序日志

.net core .Net核心事件日志-覆盖未处理的异常将写入应用程序日志,.net-core,custom-eventlog,.net Core,Custom Eventlog,我已在.Net Core 5.0应用程序中配置EventLog,以将应用程序事件记录到自定义事件日志: public Startup (IConfiguration configuration) { this.configuration = configuration; this.logger = LoggerFactory.Create(logging=>{ logging.AddConsole();

我已在.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");
    }
我在appsettings中的日志记录配置:

    "Logging": {
    "LogLevel": {
        "Default": "Information",
        "Microsoft": "Warning",
        "Microsoft.Hosting.Lifetime": "Information"
    },
    "EventLog": {
        "LogLevel": {
            "Default": "Information"
        }
    }
}
一切正常,但有些消息(特别是未处理的异常)被写入“应用程序”日志,而不是配置[“事件日志名”]日志。知道如何将应用程序配置为将应用程序中的所有消息记录到配置[“EventLogName”]日志中吗?
非常感谢

我看到您在
startup.cs
中创建了一个
记录器的实例。我想你是在你的DI上注册的吧?如果是,您不会看到来自所有源的日志,因为它们可能没有使用您的
Logger
实例。您只需配置特定的
记录器
,而不是
记录器工厂

您能在
程序.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>();
            });
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((主机生成器、日志生成器)=>{
logBuilder.AddConsole();
logBuilder.AddEventLog(设置=>{
set.LogName=hostBuilder.Configuration[“EventLogName”];
set.SourceName=hostBuilder.Configuration[“EventLogSource”];
set.Filter=(category,level)=>level>=LogLevel.Trace;
});
})
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
});
这样,我也为我不控制的代码配置了
Logger
——依赖项


但是,如果您想要一个最简单的解决方案来修复未处理的异常,那么快速修复方法就是通过DI注入的特定
记录器创建一个带有try-catch和带有日志异常的rethrow的中间件。

Michal感谢您的帮助,将日志配置移动到program.cs解决了问题。在DI中,我注册LoggerFactory.Create(logging=>{}).CreateLogger(“阶段服务器记录器”);而且它工作得很好,就像我需要的那样。谢谢