Создание пользовательских функций расширения для ведения журнала с помощью NLog

Я использую NLog в проекте.Net Core 2.2.

Я хочу реализовать систему категорий для моих журналов с использованием EventId (поддерживается в NLog).

В настоящее время я использую такой логгер:

logger.LogInformation(new EventId(5, "UserLogin"), "The user: {username} logged in.", username);
logger.LogInformation(new EventId(6, "UserChangedPassword"), "The user: {username} changed their password.", username);

Но я бы предпочел использовать его так:

logger.LogUserLogin(username);
logger.LogUserChangedPassword(username);

Где LogUserLogin и LogUserChangedPassword - это настраиваемые функции, которые добавляют правильный идентификатор и имя EventId, а затем регистрируют событие как LogInformation.

Мои вопросы:

  1. Как я могу расширить логгер своими пользовательскими функциями?
  2. Является ли это неправильным / неидеальным способом реализации системы категорий для NLog? Должен ли я лучше определять EventId, когда я пишу журналы, как я делаю сейчас?

Я чувствую, что это должно быть относительно просто, но мои навыки поиска в Google, кажется, меня подводят.

1 ответ

Решение

В LogInformationиз абстракции Microsoft (не NLog), но нет проблем!

Просто напишите два метода расширения C#:

/// <summary>
/// Extensions for <see cref="Microsoft.Extensions.Logging.ILogger"/>
/// </summary>
public static class LoggerExtensions
{
    public static void LogUserLogin<T>(this ILogger<T> logger, string username)
    {
        logger.LogInformation(new EventId(5, "UserLogin"), "The user: {username} logged in.", username);
    }  

    public static void LogUserChangedPassword<T>(this ILogger<T> logger, string username)
    {
        logger.LogInformation(new EventId(6, "UserChangedPassword"), "The user: {username} changed their password.", username);
    }
}

Является ли это неправильным / неидеальным способом реализации системы категорий для NLog? Должен ли я лучше определять EventId, когда я пишу журналы, как я делаю сейчас?

Думаю, это хороший способ. Есть и другие способы делать абстракции, но это неплохой выбор IMO.

Другие вопросы по тегам