如何关闭Serilog?

How to turn off Serilog?

我们使用 Serilog 通过 Windows 服务将项目记录到数据库中,用户希望能够手动 运行,所以我们制作了一个按钮(在网络上页面)调用相同的代码(作为模块,而不是服务本身)。

当我们添加代码来初始化日志时,代码将继续添加到数据库日志 table,之后它还会记录所有的 http 流量。因此,在这段代码 运行s 之后,我们希望 'turn off' Web 服务器上的记录器 运行ning。有简单的方法吗?

Log.Logger = new LoggerConfiguration()
       .WriteTo.MSSqlServer(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString,
                "LOGS")
       .CreateLogger();

可以在运行时使用 LoggingLevelSwitch:

修改日志级别
var ls = new LoggingLevelSwitch();

Log.Logger = new LoggerConfiguration()
   .MinimumLevel.ControlledBy(ls)
   .WriteTo.MSSqlServer(...)
   .CreateLogger();

日志记录最初将处于 Information 级别,您可以通过开关更改它。

Serilog 未定义 Off 级别,但您可以将其近似为:

ls.MinimumLevel = ((LogEventLevel) 1 + (int) LogEventLevel.Fatal);

...关闭注销。

这个问题已经有好几年了,但我现在正好遇到类似的问题。

关闭 Serilog 的注销最简单的方法是创建一个新的记录器没有任何接收器。从 Serilog 的文档中,Configuration Basics:

Log.Logger = new LoggerConfiguration().CreateLogger();
Log.Information("No one listens to me!");

编辑 (08/05/2017)

上述解决方案不正确。经过更多研究,我发现这可以通过在配置记录器时设置过滤器来完成:

Log.Logger = new LoggerConfiguration()
    .Filter.ByExcluding(_ => !IsLoggingEnabled)
    .WriteTo.MSSqlServer(...)
    .CreateLogger();

,其中 IsLoggingEnabled 只是一个布尔标志。

根据 Microsoft 日志记录文档,如果您将日志级别设置为 None,所有日志都将被抑制。

To suppress all logs, specify LogLevel.None. LogLevel.None has a value of 6, which is higher than LogLevel.Critical (5).

Any logs below the minimum level are not: Passed to the provider. Logged or displayed.

您可以在配置日志记录部分下参考此文档。 logging for asp.net core

对于 Serilog,您可以设置

"Serilog": {
"MinimumLevel": {
  "Default": "6"
}}

这个配置会关闭Serilog,我在运行的时候试了一下,成功了。