繁体   English   中英

如何关闭 Serilog?

[英]How to turn off Serilog?

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

当我们在代码中添加初始化日志以便代码将继续添加到数据库日志表时,它还会记录此后的所有 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)

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

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

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

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

要禁止所有日志,请指定 LogLevel.None。 LogLevel.None 的值为 6,高于 LogLevel.Critical (5)。

任何低于最低级别的日志都不会:传递给提供者。 记录或显示。

您可以在配置日志记录部分下参考此文档。 登录 asp.net 核心

对于 Serilog,您可以设置

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

此配置将关闭Serilog ,我在运行时尝试它并且它有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM