如何关闭Serilog?

bow*_*ner 8 c# serilog

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

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

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

Nic*_*rdt 14

可以在运行时修改日志级别LoggingLevelSwitch:

var ls = new LoggingLevelSwitch();

Log.Logger = new LoggerConfiguration()
   .MinimumLevel.ControlledBy(ls)
   .WriteTo.MSSqlServer(...)
   .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

记录最初将处于该Information级别,您可以通过该开关更改此值.

Serilog没有定义Off级别,但您可以使用以下方式对其进行近似:

ls.MinimumLevel = ((LogEventLevel) 1 + (int) LogEventLevel.Fatal);
Run Code Online (Sandbox Code Playgroud)

...关闭注销

  • 感谢您的回答。我认识到 LoggingLevelSwitch 可以用作设置日志记录级别的参数。但似乎为了更改日志记录级别,必须重新部署应用程序才能更改 LoggingLevelSwitch。有没有办法更改日志记录级别而不需要新的构建和部署?也许通过配置文件或 appSettings 文件? (4认同)

Sor*_*imi 13

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

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

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

您可以参考配置日志记录部分下的此文档。ASP.NET Core 的日志记录

对于 Serilog 你可以设置

"Serilog": {
"MinimumLevel": {
  "Default": "6"
}}
Run Code Online (Sandbox Code Playgroud)

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

  • FWIW:基本上任何大于 6 的数值都会禁用接收器。 (2认同)

ruc*_*mzu 6

这个问题已经有几年了,但我现在碰巧遇到了类似的问题.

转换Serilog注销的最简单方法是创建一个没有任何接收器的新记录器.从Serilog的文档,配置基础知识:

Log.Logger = new LoggerConfiguration().CreateLogger();
Log.Information("No one listens to me!");
Run Code Online (Sandbox Code Playgroud)

编辑(08/05/2017)

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

Log.Logger = new LoggerConfiguration()
    .Filter.ByExcluding(_ => !IsLoggingEnabled)
    .WriteTo.MSSqlServer(...)
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

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