我想要的情况是将全局日志级别设置为错误。这是在启动类中调用的我的配置代码:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Error()
.WriteTo.Logger(p=>p.Filter.ByIncludingOnly(evt => evt.Level ==
LogEventLevel.Error).WriteTo.MSSqlServer(ConnectionString, "Serilogs",
null, LogEventLevel.Error, 50,
null, null, false, columnOptions))
但是问题是我想在控制器的某些操作方法中编写一些自定义的Information log,如下所示:
Log.Logger.Information("{User} {RawUrl} ",
userId,actionContext.Request.RequestUri.AbsolutePath);
问题是Serilog 不写信息日志到SQL表,因为在startup.cs类中定义了全局错误级别设置。是否有解决此问题的方法(未将全局日志级别设置为“信息”)?
MinimumLevel.Error()
构造旨在用作粗略的高级滤波器。
WriteTo.Logger
和其他接收器也提供了等效的方法来设置将要到达该接收器的最小电平。因此,关键是仅在该级别进行过滤(使用minimumLevel
可选参数替代)。
一旦您删除了全局过滤,根据设计,该过滤将阻止您的日志请求被捕获,甚至将其提交到接收器,下一步是为您的Filter.ByIncluding
找到一种方法LogEvent
级别的Information
是相关的-一种示例方式是将特定上下文列入白名单(但是您可能也只想用属性标记它)。示例:
Log.Logger = ....
var importantInfoLog = Log.Logger.ForContext<MyClass>();
importantInfoLog.Information("Warning, this is important Information!")
然后您可以告诉WriteTo.Logger
去
<MyClass>
,则包含信息另一种(但我认为较差的)解决方案是配置多个WriteTo.Logger
:-
minimumLevel
设置为Error
]minimumLevel
保留为默认值(表示> = Information
),但仅捕获所需的特定Information
级别消息。