【问题标题】:Injected Serilog does log to Debug, but not File注入的 Serilog 确实记录到调试,但不是文件
【发布时间】:2022-08-21 03:15:08
【问题描述】:

我正在尝试在我的 .NET 6 应用程序中使用 Serilog 和 DI。我有这样的 Serilog 配置:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .MinimumLevel.Override(\"Microsoft\", Serilog.Events.LogEventLevel.Information)
    .Enrich.FromLogContext()
    .WriteTo.Console()
    .WriteTo.Debug()
    .WriteTo.File(@\"D:\\log.txt\",
                  retainedFileCountLimit: 5,
                  rollingInterval: RollingInterval.Day)
    .CreateLogger();

和我的通用主机使用

IHostBuilder host = new HostBuilder().UseSerilog(Log.Logger).Build()

(为简洁起见,此处未显示配置和服务添加)。

在我的服务类中,我需要 Microsoft.Extensions.Logging 包中的 ILogger。 现在,我遇到的问题是我从任何地方都可以正确记录到调试,但是文件接收器仅在我使用 Serilogs Log.Debug() 方法时才会记录。

如果我在 Hostbuilder 上注释掉 \"UseSerilog()\",我也无法登录 Debug。因此,将 Serilog 注入 ILogger 似乎可行。

任何想法这里发生了什么?

  • 您能否提供一个示例,说明您正在调用的日志方法不起作用?请记住,您可以向我们提供minimal reproducible example

标签: dependency-injection .net-6.0 serilog serilog-sinks-file


【解决方案1】:

所以事实证明这是一个相当愚蠢的错误(对于任何感兴趣的人)。 不知何故,我认为这是一个好主意:

try {
  Log.Debug("Starting Hostbuild");
  BuildHost();
}
catch (Exception ex)
{
  Log.Fatal(ex, "Hostbuild Failed unexpectedly");
  return;
}
finally
{
  Log.CloseAndFlush();
}

HostbuildBuildHost() 中完成之后,当然会将我的 Serilog Logger (Log) 重置为默认值。

我想我在某处读到你应该在最后打电话给CloseAndFlush,但后来改变了我的“结束”的位置......

【讨论】:

    猜你喜欢
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多