C# 为什么不是';即使级别设置为Debug,是否仍要写入调试消息?
我写了下面这行代码是为了在C#/WPF应用程序中创建我的记录器,但是调试消息没有显示在日志中。我错过了什么?我使用的是serilog.sinks.file版本4.0.0。发布版本生成生成信息级事件,但调试版本不生成调试消息。我已确认已定义调试符号,并已调试以确认级别实际上已设置为调试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
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()”。结果,它不起作用了。显然,该值是由每个接收器写入程序继承的?我发现此文档非常有用: