Записывать журналы только для настраиваемого ведения журнала

Я слежу за этой статьей:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1

Я пытаюсь регистрировать только свой собственный журнал в API-интерфейсе asp.net core 3.1. И не все журналы генерируются из ядра asp.net. Я создал пустой сервис прогноза погоды:

[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
    _logger.LogTrace("LogTrace");
    _logger.LogDebug("LogDebug");
    _logger.LogInformation("LogInformation");
    _logger.LogError("LogError");

    var rng = new Random();
    return Enumerable.Range(1, 5).Select(index => new WeatherForecast
    {
        Date = DateTime.Now.AddDays(index),
        TemperatureC = rng.Next(-20, 55),
        Summary = Summaries[rng.Next(Summaries.Length)]
    })
    .ToArray();
}

appsettings.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Trace",
      "Microsoft": "Trace",
      "TestAPI": "Trace"
    },
    "ApplicationInsights": {
      "InstrumentationKey": "xx-xx-x-x-xx",
      "LogLevel": {
        "Default": "Trace",
        "Microsoft": "Trace",
        "TestAPI": "Trace"
      }
    }
  },
  "AllowedHosts": "*"
}

У меня установлен следующий nuget как версия 2.14.0: Microsoft.Extensions.Logging.ApplicationInsights Microsoft.ApplicationInsights.AspNetCore

Теперь я пытаюсь запустить приложение, но не получаю логов.

Пробую добавить services.AddApplicationInsightsTelemetry(); в запуск:

public void ConfigureServices(IServiceCollection services)
{
    services.AddApplicationInsightsTelemetry();
    services.AddControllers();
}

Логов же нет.

2 ответа

Решение

Во-первых, обратите внимание, что ApplicationInsights ключ означает две очень разные вещи в зависимости от того, где он находится в файле JSON.

Если ключ находится на корневом уровне JSON (т. Е. То, что вы называете "внешним"), он используется для настройки Application Insights, и именно здесь вы указываете свой ключ инструментария. Выглядит это так:

{
  "ApplicationInsights": {
    "Instrumentationkey":"xxx-36a5-4687-b1fc-xxxxxx"
  }
}

Во-вторых, если он находится внутри Logging раздел, он используется для настройки ApplicationInsightsLoggerProvider, который определяет, какой уровень журнала отправляется в Application Insights. ЭтоILogger механизм фильтрации журналов.

По умолчанию только уровни журнала warningили выше отправляются в аналитику приложений. Если вы хотите отправлять все свои журналы только в аналитику приложений, вы можете либо настроить его для своих пространств имен, либо игнорировать сообщения, поступающие изSystem а также Microsoft пространства имен:

{
  "Logging": {
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Trace"
        "System": "None",
        "Microsoft": "None"
      }
    }
}

Во-первых, нет необходимости выносить эти настройки провайдера за пределы "Ведение журнала" (не следует).
Каждую настройку ведения журнала, которую вы хотите, следует помещать только внутрь (если только не настроен провайдер специально для чтения)

Теперь, чтобы ответить на ваш вопрос, предположим, что корневое пространство имен вашего приложения MyNetCore. (будет похоже на название проекта).

Если вы используете Visual Studio, вы можете просмотреть корневое пространство имен своего проекта в разделе "Свойства проекта" -> "Приложение" -> "Пространство имен по умолчанию".

Чтобы просматривать журналы только из вашего приложения, вы должны установить уровень ведения журнала по умолчанию на None и уровень ведения журнала вашего проекта MyNetCore к Trace
[Изменить: вы установили уровни ведения журнала дляApplicationInsights(или любого другого провайдера) отдельно. По умолчанию дляkestrel.]

"Logging": {
    "LogLevel": {
        "Default": "None",
        "MyNetCore": "Trace"
    },
    "ApplicationInsights": {
        "InstrumentationKey": "xxx-36a5-4687-b1fc-xxxxxx",
        "LogLevel": {
            "Default": "None",
            "MyNetCore": "Trace"
        }
    }
}

Установленный здесь уровень ведения журнала - это minimumуровень.
Если вы установите его на Trace (0), будут отображаться все уровни журнала (больше 0). т.е. отInformation к Critical
Если вы установите для него значение "Нет" (6), журналы не будут отображаться.
Ссылка на разные уровни журналов: https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.loglevel

Если вы хотите просматривать только ошибки ядра asp.net и каждый уровень журнала вашего приложения, вы можете это сделать.

"Logging": {
    "LogLevel": {
        "Default": "None",
        "Microsoft": "Error",
        "MyNetCore": "Trace"
    },
    "ApplicationInsights": {
        "InstrumentationKey": "xxx-36a5-4687-b1fc-xxxxxx",
        "LogLevel": {
            "Default": "None",
            "Microsoft": "Error",
            "MyNetCore": "Trace"
        }
    }
}

Изменить: прочитать вышеApplicationInsightsконфигурации, у вас должен быть установлен пакет Nuget https://www.nuget.org/packages/Microsoft.Extensions.Logging.ApplicationInsights. В противном случае конфиг будет полностью проигнорирован.

Другие вопросы по тегам