为什么即使将级别设置为Debug,Serilog也不会编写调试消息?

时间:2018-01-10 21:59:21

标签: c# wpf serilog

我编写了以下行来在C#/ WPF应用程序中创建我的记录器,但Debug消息没有显示在日志中。我错过了什么?我使用的是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();
        }

2 个答案:

答案 0 :(得分:8)

我认为需要这样......

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();

答案 1 :(得分:0)

我的是asp.net核心2.0项目,正在从appsetting.Development.json文件读取配置

首先,在Startup.cs文件中,按如下所示创建记录器。

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

请务必注意,最低级别设置为“详细”。注意

.MinimumLevel.Verbose()

接下来,appsettings.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具有调试功能,因此debug及以上版本将记录到seq接收器中。对于文本文件,级别为“详细”,以有效记录所有内容。

再次强调,

.MinimumLevel.Verbose()

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