Нижний уровень журнала для кварца

Я использую Serilog на своих серверах .NETCore с несколькими приемниками, такими как консоль, файл и серый журнал (GELF) для моих облачных развертываний.

Как только я устанавливаю уровень журнала на DEBUG, я получаю сообщения от потока планировщика кварца каждые несколько секунд. Как я могу это выключить? Он показывает тысячи бесполезных записей, например:

2018-11-27 22:09:35.210 +00:00 [DBG] [Quartz.Core.QuartzSchedulerThread] [ThreadId 5] Batch acquisition of 0 triggers 2018-11-27 22:10:04.038 +00:00 [DBG] [Quartz.Core.QuartzSchedulerThread] [ThreadId 5] Batch acquisition of 0 triggers 2018-11-27 22:10:30.869 +00:00 [DBG] [Quartz.Core.QuartzSchedulerThread] [ThreadId 5] Batch acquisition of 0 triggers 2018-11-27 22:11:00.591 +00:00 [DBG] [Quartz.Core.QuartzSchedulerThread] [ThreadId 5] Batch acquisition of 0 triggers

Я написал REST API для динамического изменения уровня журнала без перезапуска служб (см. _logLevelSwitch в конфигурации ниже). Однако я НЕ хочу, чтобы внешние библиотеки наследовали уровень журнала для моего кода. Как это может быть сделано?

Мне удалось сделать это для source Microsoft, используя .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) в моей конфигурации Serilog. Но Quartz - это библиотека, а ее источник - это имя моего собственного двоичного файла, поэтому я не могу таким же образом понизить уровень ведения журнала. Вот моя конфигурация Serilog (общая часть, другие реквизиты устанавливаются в зависимости от среды выполнения)

        var loggerConfig = new LoggerConfiguration()
            .MinimumLevel.ControlledBy(_logLevelSwitch)
            .Enrich.FromLogContext()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
            .Enrich.WithProcessName()
            .Enrich.WithThreadId()
            .Enrich.WithMachineName()
            .Enrich.WithAssemblyName();

Затем я использую дополнительный код конфигурации, специфичный для среды выполнения, например:

switch (po.Runtime)
{
    case Runtime.DevelLocal:
        loggerConfig.Enrich.WithProperty(new KeyValuePair<string, object>("runtime", CommonConstants.RtDevelLocal));
        _logLevelSwitch.MinimumLevel = LogEventLevel.Debug;
        loggerConfig.WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] [{SourceContext}] " +
                                                     "[ThreadId {ThreadId}] {Message:lj}{NewLine}{Exception}");
        loggerConfig.WriteTo.File(Path.Combine(po.LogPath, $"{BbDeConstants.ProductName}-.log"), rollingInterval: RollingInterval.Day,
            outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] [{SourceContext}] " +
                            "[ThreadId {ThreadId}] {Message:lj}{NewLine}{Exception}");
        break;
    case Runtime.DemoDatacenter:
        loggerConfig.Enrich.WithProperty(new KeyValuePair<string, object>("runtime", CommonConstants.RtDemoDatacenter));
        loggerConfig.WriteTo.Graylog(new GraylogSinkOptions
        {
            HostnameOrAddress = po.LogHost,
            TransportType = TransportType.Udp,
            Port = 12201,
            Facility = "BizBus",
        });
        break;
    .....
}

Я прочитал, что Quartz.Net использует Commons.logging, но я не использую его, и у меня нет для него конфигурации.

Есть идеи, как избавиться от этих Quartz.Core.QuartzSchedulerThread сообщений?


person ThommyB    schedule 28.11.2018    source источник


Ответы (1)


Я решил эту проблему, добавив эту строку в свою конфигурацию Serilog:

   .MinimumLevel.Override("Quartz", LogEventLevel.Information)

Итак, ваша конфигурация будет:

     var loggerConfig = new LoggerConfiguration()
        .MinimumLevel.ControlledBy(_logLevelSwitch)
        .Enrich.FromLogContext()
        .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
        .MinimumLevel.Override("Quartz", LogEventLevel.Information)
        .Enrich.WithProcessName()
        .Enrich.WithThreadId()
        .Enrich.WithMachineName()
        .Enrich.WithAssemblyName();
person Lars    schedule 22.08.2019
comment
Спасибо, мои файлы журналов снова бесплатны! - person morleyc; 29.06.2021