2

我在我的 .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”] 日志。知道如何配置应用程序以将应用程序中的所有消息记录到 configuration["EventLogName"] 日志吗?非常感谢

4

1 回答 1

2

我看到你Logger在你的startup.cs. 我想你在你的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 的中间件,并通过您的特定Logger注入的 DI 重新抛出记录异常。

于 2021-04-13T15:35:39.467 回答