这是我的默认 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()
....
Run Code Online (Sandbox Code Playgroud)
当默认值为信息时,如何在运行时将特定命名空间的日志级别更改为调试?
每个人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);
}
Run Code Online (Sandbox Code Playgroud)
配置您的 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();
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后在您的应用程序中的某处,例如,在处理可以在运行时更改的应用程序配置的代码中,将LoggingLevelSwitch实例更新为LogEventLevel您想要的新实例:
public class AppSettings
{
void ChangeLoggingEventLevel()
{
LoggingLevelSwitches.MicrosoftHostingLifetimeLevelSwitch
.MinimumLevel = LogEventLevel.Error;
LoggingLevelSwitches.MicrosoftHostingLifetimeLevelSwitch
.MinimumLevel = LogEventLevel.Warning;
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,LogEventLevel由LoggingLevelSwitch实例控制,因此您可以决定在应用程序中的何处(以及如何)修改这些实例,以影响日志记录管道。
上面的示例我假设您的应用程序中有一个屏幕(或 API),用户可以配置日志记录级别。
如果没有,另一种方法是使用后台线程定期检查配置文件、环境变量或查询数据库等,以确定这些日志记录级别应该是什么。
如果您使用的是.NET Core主机,可以使用选项模式可处理配置的刷新你,并让你执行代码时的配置改变(你会改变MinimumLevel你的LoggingLevelSwitch(ES)你有。
| 归档时间: |
|
| 查看次数: |
1466 次 |
| 最近记录: |