При программном создании LoggerConfiguration
для последующего использования я хотел и смог ограничить использование обогащателя для всех значений контекста источника , кроме one (Global.asax со старого веб-сайта веб-форм) .
Но мне кажется, что это уходит (мне не нравится этот Invoke
вызов) от того, что я считаю библиотекой Serilog, предназначенной для практики, через довольно приятный и элегантный свободный API:
private static LoggerConfiguration GetBasicLoggerConfig()
{
return new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.When(
logEvent => !Matching.FromSource("ASP.global_asax").Invoke(logEvent),
enrichmentConfig => enrichmentConfig.WithAnyKindOfEnricher());
}
Я использую эту логику c, чтобы исключить запуск списка обогащателей вне контекста, и хочу, чтобы они выполнялись только в течение жизненного цикла страницы. Но независимо от этого случая, поскольку я собираюсь применить этот подход в других местах, я хочу сохранить его чистым и кратким, и Меня больше всего интересует само понятие - «обогатить, исключив конкретный контекст».
Я искал способы типа WhenNot
или NotMatching
до express "отрицание" / "исключение" и не смог найти их в библиотеке. Пробовал с другими методами, предложенными stati c class Matching
, но безрезультатно. Проект большой, и я хотел бы персонализировать всю регистрацию в зависимости от различных контекстов (поэтому в итоге мы использовали серию Enrich.When()
s - и с большим списком обогащений, получая полное дерево конфигурации с несколькими ", исключая только одну части контекста кажутся уродливыми / грязными).
Конечно, централизованное объявление значения по умолчанию для контекста, как в примере ниже, не обрезает его, потому что будут различные контексты, объявленные через .ForContext<T>()
, и все они, кроме нужно быть «пойманным» в состоянии для обогащения.
// this does not cut it
return new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.WithProperty(Serilog.Core.Constants.SourceContextPropertyName, "default")
.Enrich.When(Matching.FromSource("default"),
enrichmentConfig => enrichmentConfig.WithAnyKindOfEnricher());
Надеюсь, что мне удалось объяснить, чего я пытаюсь достичь. (Имена лямбда-параметров длинные для ясности)
Итак, я что-то упустил или есть другой подход? Как лучше всего достичь этого «обогащения путем исключения»?
более поздние правки: - Забыл упомянуть, что я вхожу только в файлы (используя приемник файлов). - Не желаю интегрировать Seq (я знаю о его преимуществах), по крайней мере, не в ближайшее время.