gpt4 book ai didi

Serilog,在运行时更改特定命名空间的日志级别(> MinimumLevel)

转载 作者:行者123 更新时间:2023-12-03 09:27:42 24 4
gpt4 key购买 nike

这是我的默认 Serilog 配置

SeriLogLevelSwitch.MinimumLevel = LogEventLevel.Information;
Log.Logger = new LoggerConfiguration()
.MinimumLevel.ControlledBy(SeriLogLevelSwitch)
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.MinimumLevel.Override("Microsoft.Hosting.Lifetime", LogEventLevel.Information)
.Enrich.FromLogContext()
....

当默认值为信息时,如何在运行时将特定命名空间的日志级别更改为调试?

最佳答案

您的每一个 MinimumLevel.Override可以有自己的LoggingLevelSwitch ,它允许您在运行时控制每个特定覆盖的日志级别。

创建个人 LoggingLevelSwitch对于您打算在应用程序运行时修改的每个覆盖,并将这些实例存储在您可以从应用程序的其他部分访问的位置,这将允许您更改 MinimumLevel其中LoggingLevelSwitch (es)。

例如

public class LoggingLevelSwitches
{
// Logging level switch that will be used for the "Microsoft" namespace
public static readonly LoggingLevelSwitch MicrosoftLevelSwitch
= new LoggingLevelSwitch(LogEventLevel.Warning);

// Logging level switch that will be used for the "Microsoft.Hosting.Lifetime" namespace
public static readonly LoggingLevelSwitch MicrosoftHostingLifetimeLevelSwitch
= new LoggingLevelSwitch(LogEventLevel.Information);
}

配置您的 Serilog 日志记录管道以使用这些 LoggingLevelSwitch实例:
static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", LoggingLevelSwitches.MicrosoftLevelSwitch)
.MinimumLevel.Override("Microsoft.Hosting.Lifetime",
LoggingLevelSwitches.MicrosoftHostingLifetimeLevelSwitch)
.Enrich.FromLogContext()
.CreateLogger();

// ...
}

然后在你的应用程序的某个地方,例如,在处理你的应用程序配置的代码中,可以在运行时更改,更新 LoggingLevelSwitch实例到新 LogEventLevel你要的那个:
public class AppSettings
{
void ChangeLoggingEventLevel()
{
LoggingLevelSwitches.MicrosoftHostingLifetimeLevelSwitch
.MinimumLevel = LogEventLevel.Error;

LoggingLevelSwitches.MicrosoftHostingLifetimeLevelSwitch
.MinimumLevel = LogEventLevel.Warning;

// ...
}
}

如您所见, LogEventLevelLoggingLevelSwitch 控制实例,因此由您决定将在应用程序中的何处(以及如何)修改这些实例,以影响日志记录管道。

上面的示例我假设您的应用程序中有一个屏幕(或 API),用户可以配置日志记录级别。

如果您没有,那么另一种方法是让后台线程定期检查配置文件、环境变量或查询数据库等,以确定这些日志记录级别应该是什么。

如果您使用的是 .NET Core 主机,则可以使用 Options pattern它可以为您处理配置的刷新,并允许您在配置更改时执行代码(您将更改您的 MinimumLevel (es) 的 LoggingLevelSwitch)。

关于Serilog,在运行时更改特定命名空间的日志级别(> MinimumLevel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59917704/

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