如何关闭Serilog?

时间:2015-06-15 15:32:16

标签: c# serilog

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

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

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

3 个答案:

答案 0 :(得分:14)

可以使用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);

...关闭注销。

答案 1 :(得分:6)

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

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

答案 2 :(得分:0)

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

<块引用>

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

<块引用>

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

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