Литмир - Электронная Библиотека
A
A

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>
. Ниже приведены все реализованные методы интерфейса:

public void LogAppError(Exception exception, string message,

  [CallerMemberName] string memberName = "",

  [CallerFilePath] string sourceFilePath = "",

  [CallerLineNumber] int sourceLineNumber = 0)

{

  var list = PushProperties(memberName, sourceFilePath, sourceLineNumber);

  _logger.LogError(exception, message);

  foreach (var item in list)

  {

    item.Dispose();

  }

}

public void LogAppError(string message,

  [CallerMemberName] string memberName = "",

  [CallerFilePath] string sourceFilePath = "",

  [CallerLineNumber] int sourceLineNumber = 0)

{

  var list = PushProperties(memberName, sourceFilePath, sourceLineNumber);

  _logger.LogError(message);

  foreach (var item in list)

  {

    item.Dispose();

  }

}

public void LogAppCritical(Exception exception, string message,

  [CallerMemberName] string memberName = "",

  [CallerFilePath] string sourceFilePath = "",

  [CallerLineNumber] int sourceLineNumber = 0)

{

  var list = PushProperties(memberName, sourceFilePath, sourceLineNumber);

  _logger.LogCritical(exception, message);

  foreach (var item in list)

  {

    item.Dispose();

  }

}

public void LogAppCritical(string message,

  [CallerMemberName] string memberName = "",

  [CallerFilePath] string sourceFilePath = "",

  [CallerLineNumber] int sourceLineNumber = 0)

{

  var list = PushProperties(memberName, sourceFilePath, sourceLineNumber);

  _logger.LogCritical(message);

  foreach (var item in list)

  {

    item.Dispose();

  }

}

public void LogAppDebug(string message,

  [CallerMemberName] string memberName = "",

  [CallerFilePath] string sourceFilePath = "",

  [CallerLineNumber] int sourceLineNumber = 0)

{

  var list = PushProperties(memberName, sourceFilePath, sourceLineNumber);

593
{"b":"847442","o":1}