如何关闭Serilog?

我们使用Serilog将项目记录到带有Windows服务的数据库中,并且用户希望能够进行手动运行,因此我们创建了一个按钮(在网页上)来调用相同的代码(作为模块,而不是服务本身)。

当我们在代码中添加初始化日志以便代码将继续添加到db日志表时,它也会在此之后记录所有http流量。 因此,在运行此代码之后,我们希望“关闭”在Web服务器上运行的Logger。 有一个简单的方法吗?

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的文档, 配置基础知识 :

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

编辑(08/05/2017)

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

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

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