Я использую 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
сообщений?