Serilog 不会覆盖 ILogger 的最低级别

Posted

技术标签:

【中文标题】Serilog 不会覆盖 ILogger 的最低级别【英文标题】:Serilog Won't Override Minimum Level For ILogger 【发布时间】:2020-07-11 04:58:15 【问题描述】:

我似乎无法让 Serilog 覆盖我拥有的这个 IHostedService 类的最低级别设置。

这是我的程序.cs

// ...

LoggerConfiguration CreateLogConfig()

    var minLevel = Enum.Parse<LogEventLevel>(config["ApplicationLogging:MinimumLevel"]);

    var logger = new LoggerConfiguration()
        .Enrich.FromLogContext()

    // Set up global min level filters.
    .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
    .MinimumLevel.Override("System", LogEventLevel.Error)
    .MinimumLevel.Override("StartupCheck", LogEventLevel.Information)
    .MinimumLevel.Is(minLevel)

    // ...

    return logger;


// ...

然后我有一个名为 StartupCheck.cs 的文件,如下所示:

public class StartupCheck : IHostedService

    private readonly ILogger<StartupCheck> logger;
    //  ...

    public StartupCheck(ILogger<StartupCheck> logger)
    
        this.logger = logger;
    

    public async Task StartAsync(CancellationToken cancellationToken)
    
        logger.LogInformation($"Build Number:  Assembly.GetExecutingAssembly().GetName().Version ");

        // ...
    

    // ...

    public Task StopAsync(CancellationToken cancellationToken)
    
        return Task.CompletedTask;
    


当最低级别设置为信息时,所有信息都会记录,但如果设置为更高级别,那么即使我知道它正在运行,我也看不到此类的任何内容。

通过谷歌搜索,我知道这与源上下文有关,但我无法弄清楚自动生成的源上下文是什么。我做了几次尝试都没有成功。我的示例代码具有类名,但我也尝试了完整的命名空间和命名空间的一部分。我也尝试过通过反射获取命名空间,但也没有用。我已经尝试实现 ILogger 并将记录器创建行更改为 factory.CreateLogger("StartupCheck"); 但这似乎没有任何作用。

我没有想法。

【问题讨论】:

您介意详细说明“更高”在日志记录级别方面的含义吗? 如果我将最低级别设置为错误,我将看不到任何内容,因为日志级别是该类中的信息。应该发生的是我应该看到该类的信息级别日志记录,因为它有一个覆盖,说它的最低级别是信息。 【参考方案1】:

Override() 的参数是命名空间限定的,因此,如果您的类是 MyApp.StartupCheck,则需要在覆盖中包含完整的字符串,而不仅仅是类名。

【讨论】:

可能有助于用所有细节更新您的问题,使其代表您的真实代码,包括 Serilog 配置的其余部分,以及您如何将其连接到 ASP.NET Core;问题似乎不在您发布的片段中。

以上是关于Serilog 不会覆盖 ILogger 的最低级别的主要内容,如果未能解决你的问题,请参考以下文章

web-api启动时如何注入和使用Serilog(Ilogger)

ASP.Net Classic Serilog 不写入文件

如何在没有 DI 的类库中使用 ILogger<Class>

记录:Serilog的最简配置方法

如何在Autofac子范围中覆盖Serilog记录器?

Serilog 不会将日志写入文件