Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不是';即使级别设置为Debug,是否仍要写入调试消息?_C#_Wpf_Serilog - Fatal编程技术网

C# 为什么不是';即使级别设置为Debug,是否仍要写入调试消息?

C# 为什么不是';即使级别设置为Debug,是否仍要写入调试消息?,c#,wpf,serilog,C#,Wpf,Serilog,我写了下面这行代码是为了在C#/WPF应用程序中创建我的记录器,但是调试消息没有显示在日志中。我错过了什么?我使用的是serilog.sinks.file版本4.0.0。发布版本生成生成信息级事件,但调试版本不生成调试消息。我已确认已定义调试符号,并已调试以确认级别实际上已设置为调试 LogEventLevel level = LogEventLevel.Information; #if DEBUG level = LogEventLevel.Debug; #endif

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

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 core 2.0项目,正在从appsetting.Development.json文件读取配置

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

var seriLogger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .ReadFrom.Configuration(configuration)    
    .CreateLogger();
这里需要注意的是,最低级别设置为Verbose。注

.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"
    }
  }
]},}
所以我有多个水槽,每个水槽都有自己的水位。sink Seq具有Debug,因此Debug和更高版本将记录到Seq sink。对于文本文件,级别是详细的,实际上所有内容都将被记录下来

再次强调,

.MinimumLevel.Verbose()

这一点很重要。若您省略或注释掉了这一点,那个么file和seq将只包含来自information和更高版本的日志,即使您将它们配置为verbose或debug。这是因为默认情况下,最低级别是“信息”

多谢各位。我认为每个函数上的restrictedToMinimumLevel足以实现这一点,但另一个函数调用对于设置配置的总体级别是必要的。我误解了文档。
MinimumLevel.Is(level)
也可以;您也不需要指定
restrictedToMinimumLevel
,这里-HTH:-)谢谢。我在MSSqlServer的写入程序中遇到了这个问题。答案中的关键是记录器级别的“.MinimumLevel.Debug()”以及接收器级别的restrictedToMinimumLevel。我的接收器设置了restrictedToMinimumLevel,但没有在记录器级别设置“.MinimumLevel.Debug()”。结果,它不起作用了。显然,该值是由每个接收器写入程序继承的?我发现此文档非常有用: