_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, добавив новый класс по имени LoggingConfiguration в каталог Logging проекта AutoLot.Services. Модифицируйте операторы using и сделайте класс открытым и статическим:
using System;
using System.Collections.Generic;
using System.Data;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})
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 нуждается в списке столбцов, идентифицированных с использованием типа SqlColumn. Добавьте показанный далее код для конфигурирования столбцов базы данных:
private 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 в HostBuildern третий — завершение конфигурирования Serilog. Добавьте новый метод по имени ConfigureSerilog(), который является расширяющим методом для IHostBuilder: