我们使用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)
...关闭注销
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,我在运行时尝试它并且它有效。
这个问题已经有几年了,但我现在碰巧遇到了类似的问题.
转换Serilog注销的最简单方法是创建一个没有任何接收器的新记录器.从Serilog的文档,配置基础知识:
Log.Logger = new LoggerConfiguration().CreateLogger();
Log.Information("No one listens to me!");
Run Code Online (Sandbox Code Playgroud)
上述解决方案不正确.经过一些研究,我发现这可以通过在配置记录器时设置过滤器来完成:
Log.Logger = new LoggerConfiguration()
.Filter.ByExcluding(_ => !IsLoggingEnabled)
.WriteTo.MSSqlServer(...)
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
,其中IsLoggingEnabled只是一个布尔标志.
| 归档时间: |
|
| 查看次数: |
3707 次 |
| 最近记录: |