Создание пользовательских функций расширения для ведения журнала с помощью 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.
Мои вопросы:
- Как я могу расширить логгер своими пользовательскими функциями?
- Является ли это неправильным / неидеальным способом реализации системы категорий для 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.