gpt4 book ai didi

logging - 如何在不重新启动应用程序的情况下重新配置Serilog?

转载 作者:行者123 更新时间:2023-12-04 06:18:49 28 4
gpt4 key购买 nike

In a long running process (such as a Windows service or an ASP.NET application) it’s sometimes desirable to temporarily increase the log level without stopping the application. NLog can monitor logging configuration files and re-read them each time they are modified.



https://github.com/nlog/NLog/wiki/Configuration-file#automatic-reconfiguration

Serilog也可以吗?

最佳答案

为此使用LoggingLevelSwitch:

// Set initial level
var levelSwitch = new LoggingLevelSwitch(LogEventLevel.Warning);

Log.Logger = new LoggerConfiguration()
.MinimumLevel.ControlledBy(levelSwitch)
.WriteTo.Console()
.CreateLogger();

Log.Debug("This is not shown");

levelSwitch.MinimumLevel = LogEventLevel.Debug;

Log.Debug("This will now be shown, since the level has changed");

当更改levelSwitch.MinimumLevel时,记录器将获取新的最低水平设置。

对于Serilog 1.4.10及更早版本

Serilog并不把它当作一流的概念。

可以使用过滤器来模拟:
// Stored e.g. in a static field
volatile LogEventLevel minLevel;

Log.Logger = new LoggerConfiguration()
.Filter.ByExcluding(evt => (int)evt.Level < (int)minLevel)
.CreateLogger();

确定如何在应用程序运行时修改 minLevel取决于您。

由于在所有情况下都会生成事件,因此这种方法不像本地设置最低级别那样有效,但是实际开销不应该很大。

根据您使用的接收器,另一种方法是简单地创建多个记录器,然后在它们之间进行选择:
var minVerboseLogger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.CreateLogger();

var minWarningLogger = new LoggerConfiguration()
.MinimumLevel.Warning()
.CreateLogger();

// Somewhere else:
public ILogger Log
{
get { return isVerbose ? minVerboseLogger : minWarningLogger; }
}

第二种方法是可取的,但是如果两个记录器需要共享相同的日志文件,则效果会不佳。如果在两种情况下都需要写入文件,则将较高级别的记录器链接到较低的记录器,例如:
var minWarningLogger = new LoggerConfiguration()
.MinimumLevel.Warning()
.WriteTo.Sink((ILogEventSink)minVerboseLogger)
.CreateLogger();

诚然,这比您链接的NLog方法更复杂。我会考虑如何使它更平滑。

关于logging - 如何在不重新启动应用程序的情况下重新配置Serilog?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25477415/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com