Asp.net mvc 是否有方法覆盖Serilog全局记录器';s日志级别

Asp.net mvc 是否有方法覆盖Serilog全局记录器';s日志级别,asp.net-mvc,serilog,serilog-exceptions,Asp.net Mvc,Serilog,Serilog Exceptions,我想要的场景是将全局日志级别设置为Error。这是我在startup类中调用的配置代码: Log.Logger = new LoggerConfiguration() .MinimumLevel.Error() .WriteTo.Logger(p=>p.Filter.ByIncludingOnly(evt => evt.Level == LogEventLevel.Error).WriteTo.MSSqlServer(Connec

我想要的场景是将全局日志级别设置为Error。这是我在startup类中调用的配置代码:

 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))
但问题是,我想在控制器中的一些操作方法中编写一些自定义的信息日志,如下所示:

            Log.Logger.Information("{User} {RawUrl} ", 
      userId,actionContext.Request.RequestUri.AbsolutePath);

问题是Serilog没有将信息日志写入SQL表,因为startup.cs类中定义了全局错误级别设置。是否有解决此问题的方法(不将全局日志级别设置为信息)?

最小级别.Error()构造旨在成为一个粗略的高级过滤器,它可以非常有效地排除日志方式,然后再将其发送到接收器。虽然想要依靠它是很自然的,但这并不关键——如果您稍后在日志管道中通过白名单日志条目进行过滤,您会惊讶于Serilog的效率到底有多高

WriteTo.Logger
和其他接收器也提供了一种等效的方法来设置将进入该接收器的最低级别。因此,关键是只在该级别进行过滤(使用
minimumLevel
可选参数覆盖)

一旦您删除了全局筛选,根据设计,它会阻止您的日志请求被捕获,更不用说提交到接收器了,下一步是为您的
过滤器找到一种方法。通过包含
来识别
信息的
日志事件
级别是相关的-一种示例方法是将特定上下文列为白名单(但您也可能只想用属性标记它)。例如:

Log.Logger = ....

var importantInfoLog = Log.Logger.ForContext<MyClass>();

importantInfoLog.Information("Warning, this is important Information!")
Log.Logger=。。。。
var importantInfoLog=Log.Logger.ForContext();
importantInfoLog.Information(“警告,这是重要信息!”)
然后,您可以告诉
WriteTo.Logger
to

  • 包含任何>=错误的内容
  • 如果SourceContext是
另一种解决方案(但我认为较差)是配置多个
WriteTo.Logger
:-

  • minimumLevel
    设置为
    Error
  • 另一个将
    minimumLevel
    保留为默认值(意味着>=
    信息
    ),但只获取所需的特定
    信息
    级别的消息