Налаштовуємо Blazor Server Logging
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.
Привіт!
Сьогодні подивимось, як налаштовувати логування в BlazorServer.
Одразу після створення проекту в корені проекту буде файл appsettings.json
.
json { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" }
Саме тут вказано налаштування логування. LogLevel
починається з Default
, який має значення Information
. Це означає, що за замовчуванням лог левел буде Information
. Далі йде Microsoft
з рівнем Warning
, відповідно для namespace Microsoft
рівень логування буде Warning
. І в самому кінці Microsoft.Hosting.Lifetime
має значення Information
. Це означає що для всього namespace Microsoft
, окрім частини Hosting.Lifetime
буде значення Warning
.
Якщо змінити налаштування логування, в цьому файлі і запустити аплікації нічого не зміниться. А все тому, що в launchSettings.json
вказано "ASPNETCORE_ENVIRONMENT": "Development"
. І для development середовища використовується інший файл appsettings.Development.json
. Знайти його можна, якщо натиснути на стрілку біля appsettings.json
.
Я поміняю всі рівні на Debug
в appsettings.Development.json
.
{ "DetailedErrors": true, "Logging": { "LogLevel": { "Default": "Debug", "Microsoft": "Debug", "Microsoft.Hosting.Lifetime": "Debug" } } }
Після цього запущу аплікацію. І побачу багато логів в консолі.
Якщо мені потрібно з усіх логів включити тільки якийсь конкретний, я теж можу це зробити.
Наприклад, мені потрібно бачити логи з Microsoft.AspNetCore.Components.RenderTree.Renderer
в Debug
а всі інші в інфо. Для цього я добавлю його в appsettings.Development.json
.
{ "DetailedErrors": true, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information", "Microsoft.AspNetCore.Components.RenderTree.Renderer": "Debug" } } }
Після цього логи будуть виглядати ось так
Logging from razor pages
Спробуєм відправити лог повідомлення з razor pages. Наприклад, візьмемо сторінку Counter.razor
.
Для використання логера спочатку потрібно імпортувати потрібний неймспейс @using Microsoft.Extensions.Logging
. І за допомогою DI, ввести логер в сторінку @inject ILogger<Counter> Logger
. Тепер логер можна використувати в сторінці.
@page "/counter" @using Microsoft.Extensions.Logging @inject ILogger<Counter> Logger <h1>Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; Logger.LogInformation("Button clicked, current count #{count}", currentCount); } }
Кожен раз як я натискаю кнопку Click me. Повідомлення з’являється в консолі.
Logging from class
Аналогічно лог повідомлення можна відправляти з класів за допомогою DI. Спочатку створюється об’єкт private readonly ILogger<WeatherForecastService> _logger;
і за допомогою конструктора передаємо наш логер.
using Microsoft.Extensions.Logging; using System; using System.Linq; using System.Threading.Tasks; namespace BlazorLearn.Data { public class WeatherForecastService { private readonly ILogger<WeatherForecastService> _logger; private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; public WeatherForecastService(ILogger<WeatherForecastService> logger) { _logger = logger; } public Task<WeatherForecast[]> GetForecastAsync(DateTime startDate) { _logger.LogInformation("WeatherForecastService called"); var rng = new Random(); return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = startDate.AddDays(index), TemperatureC = rng.Next(1, 100), Summary = Summaries[rng.Next(Summaries.Length)] }).ToArray()); } } }
Logger configuration from code
Якщо потрібно, то логер можна конфігурвати з коду, а не з application.json
. Це можна зробити в Program.cs
в методі CreateHostBuilder
. По замовчуванні він має такий вигляд.
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
Для того, щоб налаштувати логер до CreateDefaultBuilder
, потрібно добавити ConfigureLogging
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(logger => { logger.ClearProviders(); logger.SetMinimumLevel(LogLevel.Information); logger.AddConsole(); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
logger.ClearProviders()
очищає всі попередні налаштування. І після нього одразу можна додавати інший log provider, наприклад Seriolog чи будь-який інший.
logger.SetMinimumLevel(LogLevel.Information)
— вказує мінімальний лог левел.
logger.AddConsole()
— додає вивід логів в консоль.
2 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів