Интерфейс ILogger не регистрирует все в Event Log / Core 3.0 - PullRequest
4 голосов
/ 24 марта 2020

Я пытаюсь записать все, что выводит мое приложение (включая информационные сообщения), в журнал событий, но интерфейс ILogger записывает только предупреждения и выше.

Вот мой файл program.cs:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .ConfigureLogging((context, logging) =>
    {
        logging.ClearProviders();
        logging.AddConsole();
        logging.AddEventLog(context.Configuration.GetSection("Logging:EventLog").Get<EventLogSettings>());
        logging.SetMinimumLevel(LogLevel.Information);
    });

Мои наборы приложений. json:

  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Information",
      "Microsoft.Hosting.Lifetime": "Information"
    },
    "EventLog": {
      "LogName": "Application",
      "SourceName": "My cool App"
    }
  }

В своем приложении я делаю следующее:

_logger.LogInformation("test information");
_logger.LogWarning("test warning");
_logger.LogDebug("test debug");
_logger.LogError("test error");
_logger.LogTrace("test trace");
_logger.LogCritical("test critical");

В выводе консоли я получаю весь тест Сообщения. Но в журнале событий я получаю только предупреждение, ошибку и критическое состояние.

Что я здесь не так делаю?

1 Ответ

3 голосов
/ 25 марта 2020

в журнале событий я получаю только предупреждение, ошибку и критическое состояние.

Из этой документации вы можете обнаружить, что события будут регистрироваться для Уровень предупреждения и выше , когда мы используем Microsoft.Extensions.Logging.EventLog.

Чтобы регистрировать события ниже LogLevel.Warning, пожалуйста, установите уровень журнала явно, как показано ниже.

"EventLog": {
  "LogLevel": {
    "Default": "Trace"
  }
}

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

А из исходного кода EventLogLogger.cs , как показано ниже, мы можем обнаружить, что он будет использовать Information , Warning и Ошибка как EventLog EntryType на основе LogLevel для записи EventLog (s).

    private EventLogEntryType GetEventLogEntryType(LogLevel level)
    {
        switch (level)
        {
            case LogLevel.Information:
            case LogLevel.Debug:
            case LogLevel.Trace:
                return EventLogEntryType.Information;
            case LogLevel.Warning:
                return EventLogEntryType.Warning;
            case LogLevel.Critical:
            case LogLevel.Error:
                return EventLogEntryType.Error;
            default:
                return EventLogEntryType.Information;
        }
    }

Результат теста

_logger.LogTrace("test trace1");

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...