Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<b> "schema": "Logging",</b>
<b> "tableName": "SeriLogs",</b>
<b> "restrictedToMinimumLevel": "Warning"</b>
<b> }</b>
},
"RebuildDataBase": false,
<b> "ApplicationName": "AutoLot.Api - Prod",</b>
"ConnectionStrings": {
"AutoLot": "It's a secret"
}
}
Обновление Program.cs
Добавьте в файлы Program.cs в проектах AutoLot.Api и AutoLot.Mvc следующий оператор using:
using AutoLot.Services.Logging;
Модифицируйте метод CreateHostBuilder() в обоих проектах, как показано ниже:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).ConfigureSerilog();
Обновление Startup.cs
Добавьте в файлы Startup.cs в проектах AutoLot.Api и AutoLot.Mvc следующий оператор using:
using AutoLot.Services.Logging;
Затем необходимо поместить новые интерфейсы ведения журнала в контейнер DI. Добавьте в метод ConfigureServices() в обоих проектах такой код:
services.AddScoped(typeof(IAppLogging<>), typeof(AppLogging<>));
Обновление контроллера
Следующее обновление связано с заменой ссылок на ILogger ссылками на IAppLogging. Начните с класса WeatherForecastController в проекте AutoLot.Api. Добавьте в класс следующий оператор using:
using AutoLot.Services.Logging;
Далее измените ILogger<T> на IAppLogging<T>:
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390}){
...
private readonly <b>IAppLogging</b><WeatherForecastController> _logger;
public WeatherForecastController(<b>IAppLogging</b><WeatherForecastController> logger)
{
_logger = logger;
}
...
}
Теперь модифицируйте HomeController в проекте AutoLot.Mvc. Добавьте в класс следующий оператор using:
using AutoLot.Services.Logging;
Измените ILogger<T> на IAppLogging<T>:
[Route("[controller]/[action]")]
public class HomeController : Controller
{
private readonly <b>IAppLogging</b><HomeController> _logger;
public HomeController(<b>IAppLogging</b><HomeController> logger)
{
_logger = logger;
}
...
}
После этого регистрация в журнале выполняется в каждом контроллере простым обращением к средству ведения журнала, например:
// WeatherForecastController.cs (AutoLot.Api)
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
<b> _logger.LogAppWarning("This is a test");</b>
...
}
// HomeController.cs (AutoLot.Mvc)
[Route("/")]
[Route("/[controller]")]
[Route("/[controller]/[action]")]
[HttpGet]
public IActionResult Index()
{
<b> _logger.LogAppWarning("This is a test");</b>
return View();
}
Испытание инфраструктуры ведения журнала
Имея установленную инфраструктуру Serilog, самое время протестировать ведение журналов для приложений. Если вы используете Visual Studio, тогда укажите AutoLot.Mvc в качестве стартового проекта (щелкните правой кнопкой мыши на имени проекта в окне Solution Explorer, выберите в контекстном меню пункт Set as Startup Project (Установить как стартовый проект) и щелкните на кнопке запуска с зеленой стрелкой или нажмите <F5>). В случае работы в VS Code откройте окно терминала (<Ctrl+'>), перейдите в каталог AutoLot.Mvc и введите команду dotnet run.