这是我的默认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()
     ....

默认为信息时,如何在运行时将日志级别更改为特定 namespace 的调试?

最佳答案

您的每个MinimumLevel.Override都可以具有自己的LoggingLevelSwitch,这使您可以在运行时控制每个特定替代的日志级别。

为您打算在应用程序运行时修改的每个替代项创建单独的LoggingLevelSwitch,并将这些实例存储在可从应用程序其他部分访问的位置,这将允许您更改这些MinimumLevelLoggingLevelSwitch

例如

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,它可以为您处理配置的刷新,并允许您在配置更改时执行代码(您可以在其中更改MinimumLevelLoggingLevelSwitch(es ) 你有。

10-07 15:36