Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
_logger.LogDebug(message); foreach (var item in list) { item.Dispose(); }}public void LogAppTrace(string message, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0){ var list = PushProperties(memberName, sourceFilePath, sourceLineNumber); _logger.LogTrace(message); foreach (var item in list) { item.Dispose(); }}public void LogAppInformation(string message, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0){ var list = PushProperties(memberName, sourceFilePath, sourceLineNumber); _logger.LogInformation(message); foreach (var item in list) { item.Dispose(); }}public void LogAppWarning(string message, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0){ var list = PushProperties(memberName, sourceFilePath, sourceLineNumber); _logger.LogWarning(message); foreach (var item in list) { item.Dispose(); }}Конфигурация ведения журнала
Начните с замены стандартного средства ведения журнала инфраструктурой Serilog, добавив новый класс по имени
LoggingConfigurationLoggingAutoLot.Servicesusingusing System;using System.Collections.Generic;using System.Data;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.Hosting;using Microsoft.Extensions.Logging;using Serilog;using Serilog.Events;using Serilog.Sinks.MSSqlServer;namespace AutoLot.Services.Logging{ public static class LoggingConfiguration { }}Для записи в различные целевые объекты для ведения журналов инфраструктура Serilog использует приемники (sink). Целевыми объектами, которые будут применяться для ведения журнала в приложениях ASP.NET Core, являются текстовый файл, база данных и консоль. Приемники типа текстового файла и базы данных требуют конфигурации — выходного шаблона для текстового файла и списка полей для базы данных. Чтобы настроить выходной шаблон, создайте следующее статическое строковое поле, допускающее только чтение:
private static readonly string OutputTemplate = @"[{TimeStamp:yy-MM-dd HH:mm:ss} {Level}]{ApplicationName}:{SourceContext}{NewLine} Message:{Message}{NewLine}in method{MemberName} at {FilePath}:{LineNumber}{NewLine} {Exception}{NewLine}";Приемник SQL Server нуждается в списке столбцов, идентифицированных с использованием типа
SqlColumnprivate static readonly ColumnOptions ColumnOptions = new ColumnOptions{ AdditionalColumns = new List<SqlColumn> { new SqlColumn {DataType = SqlDbType.VarChar, ColumnName = "ApplicationName"}, new SqlColumn {DataType = SqlDbType.VarChar, ColumnName = "MachineName"}, new SqlColumn {DataType = SqlDbType.VarChar, ColumnName = "MemberName"}, new SqlColumn {DataType = SqlDbType.VarChar, ColumnName = "FilePath"}, new SqlColumn {DataType = SqlDbType.Int, ColumnName = "LineNumber"}, new SqlColumn {DataType = SqlDbType.VarChar, ColumnName = "SourceContext"}, new SqlColumn {DataType = SqlDbType.VarChar, ColumnName = "RequestPath"}, new SqlColumn {DataType = SqlDbType.VarChar, ColumnName = "ActionName"}, }};Замена стандартного средства ведения журнала вариантом Serilog представляет собой процесс из трех шагов. Первый шаг — очистка существующего поставщика, второй — добавление Serilog в
HostBuildernConfigureSerilog()IHostBuilder