Записывать журналы только для настраиваемого ведения журнала
Я слежу за этой статьей: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. В противном случае конфиг будет полностью проигнорирован.