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)