为什么即使级别设置为调试,Serilog 也不写入调试消息



我编写了以下行以在 C#/WPF 应用程序中创建我的记录器,但调试消息未显示在日志中。 我错过了什么? 我正在使用serilog.sinks.file版本4.0.0。 发布版本生成信息级别事件,但调试版本不生成调试消息。 我已经确认 DEBUG 符号已定义,并且我已经调试以确认该级别实际上已设置为调试。

LogEventLevel level = LogEventLevel.Information;
#if DEBUG
            level = LogEventLevel.Debug;
#endif
            UsageLogger = new LoggerConfiguration()
               .Enrich.With(new ThreadIdEnricher())
               .WriteTo.File("UsageLogging.txt", restrictedToMinimumLevel: level, outputTemplate: LogTemplate, rollingInterval: RollingInterval.Day)
               .Enrich.With(new ThreadIdEnricher())
               .WriteTo.Console(restrictedToMinimumLevel: level, outputTemplate: LogTemplate)
               .Enrich.With(new ThreadIdEnricher())
                .CreateLogger();
        }
我认为

它必须是这个...

LogEventLevel level = LogEventLevel.Information;
#if DEBUG
            level = LogEventLevel.Debug;
#endif
        UsageLogger = new LoggerConfiguration()
    #if DEBUG
    .MinimumLevel.Debug()
    #endif
           .Enrich.With(new ThreadIdEnricher())
           .WriteTo.File("UsageLogging.txt", restrictedToMinimumLevel: level, outputTemplate: LogTemplate, rollingInterval: RollingInterval.Day)
           .Enrich.With(new ThreadIdEnricher())
           .WriteTo.Console(restrictedToMinimumLevel: level, outputTemplate: LogTemplate)
           .Enrich.With(new ThreadIdEnricher())
            .CreateLogger();

Mine是一个 asp.net 核心2.0项目,并从appset读取配置。开发.json 文件

在 Startup.cs 文件中,首先需要按如下方式创建记录器。

var seriLogger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .ReadFrom.Configuration(configuration)    
    .CreateLogger();

这里需要注意的是,最低级别设置为"详细"。注意

.MinimumLevel.Verbose()

接下来是应用设置。Developement.json如下所示。

{
  "ConnectionStrings": {
  "HPlusSportsConnection": "Data Source=DESKTOP-Feast\sqlexpress;Initial Catalog=H_Plus_Sports;Persist Security Info=True;User ID=fakeUserId;Password=fakePassword"
},
"Serilog": {
"WriteTo": [
  {
    "Name": "Seq",
    "Args": {
      "restrictedToMinimumLevel": "Debug",
      "serverUrl": "http://localhost:5341"
    }
  },
  {
    "Name": "File",
    "Args": {
      "restrictedToMinimumLevel": "Verbose",
      "path": "log.txt",
      "outputTemplate": "Will be logged {Timestamp:yyyy-MMM-dd HH:mm:ss}|{TenantName}|{RequestId}|{SourceContext}|{Level:u3}|{Message:lj}{NewLine}{Exception}",
      "rollingInterval": "Day"
    }
  }
]},}

所以我有多个水槽,每个水槽都有自己的水平。接收器 Seq 具有调试,因此调试及更高版本将记录到 seq 接收器。对于文本文件,级别是详细,有效地记录所有内容。

再次强调,

.MinimumLevel.Verbose()

在这里很重要。如果您省略或注释掉它,则文件和 seq 将仅包含来自信息和上面的日志,即使您将它们配置为详细或调试。这是因为默认情况下,最低级别是"信息"。

在应用设置中将Defaultinformation更改为debug喜欢这个:

"Logging": {
"MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
}

最新更新