我们正在使用Serilog将项目记录到带有Windows服务的数据库中,并且用户希望能够进行手动运行,因此我们创建了一个按钮(在网页上)来调用相同的代码(作为一个模块,而不是服务本身)。
当我们在代码中添加初始化日志以便代码将继续添加到db日志表时,它也会在此之后记录所有http流量。因此,在此代码运行后,我们希望关闭' Logger在Web服务器上运行。有没有一种简单的方法可以做到这一点?
Log.Logger = new LoggerConfiguration()
.WriteTo.MSSqlServer(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString,
"LOGS")
.CreateLogger();
答案 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!");
上述解决方案不正确。经过一些研究,我发现这可以通过在配置记录器时设置过滤器来完成:
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