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

на главную - закладки

Жанры

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

[CallerFilePath] string sourceFilePath = "",

[CallerLineNumber] int sourceLineNumber = 0);

void LogAppCritical(Exception exception, string message,

[CallerMemberName] string memberName = "",

[CallerFilePath] string sourceFilePath = "",

[CallerLineNumber] int sourceLineNumber = 0);

void LogAppCritical(string message,

[CallerMemberName] string memberName = "",

[CallerFilePath] string sourceFilePath = "",

[CallerLineNumber] int sourceLineNumber = 0);

void LogAppDebug(string message,

[CallerMemberName] string memberName = "",

[CallerFilePath] string sourceFilePath = "",

[CallerLineNumber] int sourceLineNumber = 0);

void LogAppTrace(string message,

[CallerMemberName] string memberName = "",

[CallerFilePath] string sourceFilePath = "",

[CallerLineNumber] int sourceLineNumber = 0);

void LogAppInformation(string message,

[CallerMemberName] string memberName = "",

[CallerFilePath] string sourceFilePath = "",

[CallerLineNumber] int sourceLineNumber = 0);

void LogAppWarning(string message,

[CallerMemberName] string memberName = "",

[CallerFilePath] string sourceFilePath = "",

[CallerLineNumber] int sourceLineNumber = 0);

}

}

Атрибуты

CallerMemberName
,
CallerFilePath
и
CallerLineNumber
инспектируют стек вызовов для получения имени члена, пути к файлу и номера строки в вызывающем коде. Например, если строка, в которой вызывается
LogAppWarning
, находится в функции
DoWork
внутри файла по имени
MyClassFile.cs
, а номер этой строки 36, тогда вызов:

_appLogger.LogAppWarning("A warning");

преобразуется в следующий эквивалент:

_appLogger.LogAppWarning ("A warning","DoWork","c:/myfilepath/MyClassFile.cs",36);

Если методу при вызове передаются значения, тогда переданные значения используются вместо значений из атрибутов.

Класс AppLogging

Класс

AppLogging
реализует интерфейс
IAppLogging
. Добавьте новый класс по имени
AppLogging
и модифицируйте операторы
using
, как показано ниже:

using System;

using System.Collections.Generic;

using System.Runtime.CompilerServices;

using Microsoft.Extensions.Configuration;

using Microsoft.Extensions.Logging;

using Serilog.Context;

Сделайте

класс открытым и реализующим интерфейс
IAppLogging<T>
. Добавьте конструктор, который принимает экземпляр реализации
ILogger<T>
(интерфейс, поддерживаемый напрямую ASP.NET Core) и экземпляр реализации
IConfiguration
. Внутри конструктора получите доступ к конфигурации, чтобы извлечь имя приложения из файла настроек. Все три элемента (
ILogger<T>
,
IConfiguration
и имя приложения) необходимо сохранить в переменных уровня класса.

namespace AutoLot.Services.Logging

{

public class AppLogging<T> : IAppLogging<T>

{

private readonly ILogger<T> _logger;

private readonly IConfiguration _config;

private readonly string _applicationName;

public AppLogging(ILogger<T> logger, IConfiguration config)

{

_logger = logger;

_config = config;

_applicationName = config.GetValue<string>("ApplicationName");

}

}

}

Инфраструктура Serilog позволяет добавлять свойства в стандартный процесс ведения журнала, заталкивая их внутрь

LogContext
. Добавьте внутренний метод для заталкивания свойств
MemberName
,
FilePath
,
LineNumber
и
ApplicationName
:

internal List<IDisposable> PushProperties(

string memberName,

string sourceFilePath,

int sourceLineNumber)

{

List<IDisposable> list = new List<IDisposable>

{

LogContext.PushProperty("MemberName", memberName),

LogContext.PushProperty("FilePath", sourceFilePath),

LogContext.PushProperty("LineNumber", sourceLineNumber),

LogContext.PushProperty("ApplicationName", _applicationName)

};

return list;

}

Каждая реализация метода следует одному и тому же процессу. На первом шаге вызывается метод

PushProperties
для добавления дополнительных свойств и затем соответствующий метод регистрации в журнале, предоставляемый
LoggerExtensions
в
ILogger<T>
. Ниже приведены все реализованные методы интерфейса:

Поделиться:
Популярные книги

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Звездная Кровь. Изгой

Елисеев Алексей Станиславович
1. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой

Хозяин Теней 4

Петров Максим Николаевич
4. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 4

Картофельное счастье попаданки

Иконникова Ольга
Фантастика:
фэнтези
5.00
рейтинг книги
Картофельное счастье попаданки

Экзорцист: Проклятый металл. Жнец. Мор. Осквернитель

Корнев Павел Николаевич
Фантастика:
фэнтези
героическая фантастика
5.50
рейтинг книги
Экзорцист: Проклятый металл. Жнец. Мор. Осквернитель

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Чехов. Книга 2

Гоблин (MeXXanik)
2. Адвокат Чехов
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Чехов. Книга 2

Хозяин Теней 2

Петров Максим Николаевич
2. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 2

Сумеречный стрелок 7

Карелин Сергей Витальевич
7. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок 7

Жизнь под чужим солнцем

Михалкова Елена Ивановна
Детективы:
прочие детективы
9.10
рейтинг книги
Жизнь под чужим солнцем

Красноармеец

Поселягин Владимир Геннадьевич
1. Красноармеец
Фантастика:
боевая фантастика
попаданцы
4.60
рейтинг книги
Красноармеец