В предыдущей части мы, в общих чертах, познакомились с логированием в 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-файлов.