如何关闭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
只是一个布尔标志。