Дочерние классы Serilog не регистрируются при использовании ByIncludingOnly

Я использую следующую конфигурацию журнала.

      .WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(Matching.FromSource<****.Application.Common.Services.Jobs.JobService>()).WriteTo.File("logs/jobs-.log", rollingInterval: RollingInterval.Day))

Я пытаюсь сделать так, чтобы любые классы, вызываемые службой заданий, регистрировались. Я не могу добавить эти классы непосредственно в конфигурацию, потому что они используются из других классов с большим объемом транзакций, и я не хочу портить журнал.

Есть ли способ вести журнал дочерних классов из настроенного вызывающего класса?

1 ответ

Matching.FromSource<****.Application.Common.Services.Jobs.JobService>() означает, что должно быть точно ****.Application.Common.Services.Jobs.JobService чтобы соответствовать фильтру.

Если вы хотите, чтобы фильтр соответствовал чему-либо под Company.Application.Common.Services.Jobs namespace, то вам нужно применить фильтр на основе пространства имен:

      .WriteTo.Logger(lc => lc.Filter
    .ByIncludingOnly(
        Matching.FromSource(
            typeof(****.Application.Common.Services.Jobs.JobService).Namespace)
        )
    // ...

Этот фильтр будет соответствовать любому фильтру, который начинается с ****.Application.Common.Services.Jobs


NB: вам также необходимо создать регистратор контекста, чтобы включить соответствующие SourceContext свойство:

      ILogger log = Log.ForContext<****.Application.Common.Services.Jobs.JobService>();
log.Information("...");
Другие вопросы по тегам