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

sha*_*874 3 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();
        }
Run Code Online (Sandbox Code Playgroud)

pmc*_*avy 9

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

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();
Run Code Online (Sandbox Code Playgroud)

  • `MinimumLevel.Is(level)`也可以做到。您也无需在此处指定`restrictedToMinimumLevel`-HTH :-) (4认同)

Viv*_*Dev 9

我的是一个 asp.net core 2.0 项目,从 appsetting.Development.json 文件中读取配置

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

var seriLogger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .ReadFrom.Configuration(configuration)    
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

这里需要注意的是,最低级别设置为 Verbose。笔记

.MinimumLevel.Verbose()
Run Code Online (Sandbox Code Playgroud)

接下来 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"
    }
  }
]},}
Run Code Online (Sandbox Code Playgroud)

所以我有多个接收器,每个接收器都有自己的级别。sink seq 有 Debug,所以 debug 及以上会被记录到 seq sink。对于文本文件,级别为 Verbose,以便有效地记录所有内容。

再次强调,

.MinimumLevel.Verbose()
Run Code Online (Sandbox Code Playgroud)

在这里很重要。如果您省略或注释掉它,那么即使您将它们配置为详细或调试,文件和 seq 也将仅具有信息和以上的日志。那是因为最低级别默认为“信息”。