Налаштовуємо Blazor Server Logging
Привіт!
Сьогодні подивимось, як налаштовувати логування в 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 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів