Что означают MinimumLevel и Override в контексте журнала appsettings.json? - PullRequest
0 голосов
/ 04 марта 2019

Я смотрю на appsettings.json из Пример проекта Serilog , который имеет следующий фрагмент:

"MinimumLevel": {
  "Default": "Debug",
  "Override": {
    "System": "Information",
    "Microsoft": "Information"
  }
}

В этом контексте, какова цель Override?Записи System и Microsoft не имеют родительского параметра в узле MinimumLevel, так что же он переопределяет?

Если я полностью не понимаю цели Override.

1 Ответ

0 голосов
/ 04 марта 2019

По умолчанию вы говорите, что любая запись в журнале с уровнем серьезности «Отладка» или выше должна быть отправлена ​​в ваши приемники (консоль, файл и т. Д.).

Это поведение, подобное Документ Microsoft о ведении журнала :

Например, настройка ведения журнала обычно предоставляется в разделе Logging файлов настроек приложения.В следующем примере показано содержимое типичного файла appsettings.Development.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    },
    "Console": {
      "IncludeScopes": true
    }
  }
}

[...]

Свойство LogLevel в Logging задает минимальный уровень дляжурнал для выбранных категорий.В этом примере категории System и Microsoft регистрируются на уровне Information, а все остальные - на уровне Debug.

Разделы переопределения предназначены для изменения записей журнала, имеющих эти пространства имен.,Обычно вы хотели бы видеть Debug записи журнала для вашего кода , но более высокий уровень (например, Information или Warning) для "не вашего кода", как Microsoft и System.

Вместо того, чтобы помещать эту конфигурацию в файл конфигурации, вы также можете использовать код:

WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>()
    .UseSerilog((ctx, cfg) =>
    {
        cfg.ReadFrom.Configuration(ctx.Configuration)
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information);
    })
    .Build();

Код от kimsereyblog.blogspot.com

Их объяснение процесса:

Из примера, который мы увидели, мы можем настроить минимальный уровень ведения журнала по умолчанию .MinimumLevel.Debug().Мы также можем переопределить это значение по умолчанию для определенных пространств имен, например, здесь мы установили минимальный уровень ведения журнала для пространства имен Microsoft на Information.Это не позволит ASP.NET Core регистрировать все журналы отладки, сохраняя при этом наши собственные журналы отладки.

Другое объяснение от nblumhardt.com :

Первый аргумент Override - это префикс исходного контекста, который обычно сопоставляется с именем типа, указанным в пространстве имен класса, связанного с регистратором.

...

ЭффектТаким образом, в приведенной выше конфигурации генерируются события только на уровне Warning или выше, если регистратор принадлежит типу в пространстве имен Microsoft.*.

...