Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

}

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;

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
:

public static IHostBuilder ConfigureSerilog(this IHostBuilder builder)

{

builder

.ConfigureLogging((context, logging) => { logging.ClearProviders; })

.UseSerilog((hostingContext, loggerConfiguration) =>

{

var config = hostingContext.Configuration;

var connectionString = config.GetConnectionString("AutoLot").ToString;

var tableName = config["Logging:MSSqlServer:tableName"].ToString;

var schema = config["Logging:MSSqlServer:schema"].ToString;

string restrictedToMinimumLevel =

config["Logging:MSSqlServer:restrictedToMinimumLevel"].ToString;

if (!Enum.TryParse<LogEventLevel>(restrictedToMinimumLevel, out var logLevel))

{

logLevel = LogEventLevel.Debug;

}

LogEventLevel level = (LogEventLevel)Enum.Parse(typeof(LogEventLevel),

Поделиться с друзьями: