В предыдущей части мы, в общих чертах, познакомились с логированием в ASP.NET Core и закончили наше знакомство на выводе логов определенных уровней. Сегодня разберемся ещё с двумя моментами, а именно — доступными по умолчанию провайдерами и конфигурацией логирования.
Провайдеры логирования ASP.NET Core
По умолчанию ASP.NET Core предоставляет следующие провайдеры логирования:
- Console — вывод логов производится в консоль. Провайдер устанавливается методом расширения
AddConsole()ILoggingBuilder - Debug — здесь для ведения лога используется класс
System.Diagnostics.Debugи его методDebug.WriteLine(). Соответственно все записи лога мы можем увидеть в окне Output в Visual Studio и не можем их увидеть при запуске приложения без отладки. Провайдер устанавливается методомAddDebug(). - EventSource — в Windows логирование ведется в лог ETW (Event Tracing for Windows), для просмотра которого может использоваться инструмент PerfView (или аналогичный). Устанавливается методом
AddEventSourceLogger() - EventLog — записывает лог в Windows Event Log. Устанавливается методом
AddEventLog()
Для каждого провайдера логирования в ASP.NET Core можно задать свою конфигурацию.
Конфигурация логирования в ASP.NET Core
Для конфигурирования логера в ASP.NET Core может использоваться любой из доступных провайдеров конфигурации. В этой части мы рассмотрим конфигурацию логера ASP.NET Core с использованием JSON-файлов.
По умолчанию,конфигурация системы логирования располагается в файлах appsettings.json или appsettings.[Название_среды_окружения].json. Рассмотрим основные элементы конфигурации логера:
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
- Узел
Logging, собственно, содержит настройки логирования в ASP.NET Core. - Узел
LogLevel— указывает минимальный уровень для ведения журнала выбранных категорий - Элемент
Default— представляется собой «универсальную» категорию, то есть значение этого элемента применяется ко всем категориям - Элемент
Microsoft.AspNetCore— указывает, что минимальный уровень будет применяться ко всем категориям, начинающимсяMicrosoft.AspNetCore, например,"Microsoft.AspNetCore.Routing.EndpointMiddleware"
Так, следуя этим настройкам, в лог будут попадать только предупреждения, ошибки и критические сообщения, если сообщение поступает от классов Microsoft.AspNetCore...и сообщения не ниже уровня Information для всех прочих случаев. То есть, для вашего приложения по умолчанию отключается вывод в лог сообщений уровня Trace или Debug. Проверить это довольно просто — попытаться вывести в лог любое сообщение с уровнем Trace/Debug:
app.Use(async (context, next) =>
{
app.Logger.LogTrace("Проверка Trace");
app.Logger.LogDebug("Проверка Debug");
await next();
});
Лог пустой. Давайте попробуем разрешить вывод всех уровней логов в консоль. Изменим файл appsettings.Development.json следующим образом:
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft.AspNetCore": "Warning"
}
}
}
здесь мы указали для категории Default самый низкий (первый) уровень. Теперь запустим приложение и увидим, что сообщения всех уровней выводятся в лог:
Причем, два сообщения уровня Debug были записаны в лог непосредственно ASP.NET Core.
Настройки логирования можно устанавливать не только для отдельных категорий, но и отдельных провайдеров логирования. Например,
{
"Logging": {
"Console": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Debug": {
"LogLevel": {
"Default": "Trace",
"Microsoft.AspNetCore": "Warning"
}
}
}
}
Здесь мы установили конфигурацию для консоли и окна отладки в Visual Studio таким образом, что в окно отладки будут попадать все сообщения, а в консоль — только информационные сообщения:
Также, мы можем установить минимальный уровень для вывода лога от нашего приложения. Например, пространство имен моего приложения начинается с «AspLogTest», установим следующую конфигурацию консольного логгера:
{
"Logging": {
"Console": {
"LogLevel": {
"AspLogTest": "Error",
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
Теперь мы будем видеть в консоли сообщения от наших классов только уровня Error и выше:
app.MapGet("/", (ILogger<Program> logger) =>
{
logger.LogCritical("Это сообщение появится И в окне отладки И в консоли");
logger.LogError("Это сообщение появится И в окне отладки И в консоли");
logger.LogInformation("Это сообщение появится только в окне отладки");
logger.LogTrace("Это сообщение появится только в окне отладки");
logger.LogDebug("Это сообщение появится только в окне отладки");
logger.LogWarning("Это сообщение появится только в окне отладки");
return "Hello World!";
});
Результат:
Таким образом, комбинирую различные категории/провайдеры логирования мы можем проводить конфигурирование системы логирования в ASP.NET Core с использованием одного из источников конфигурации — файлов Json.
Итого
Конфигурация системы логирования ASP,NET Core может осуществляться посредствам любого поставщика конфигурации. Одним из наиболее простых способов настройки конфигурации логирования является использование json-файлов.


