创建用于使用NLog记录的自定义扩展功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建用于使用NLog记录的自定义扩展功能相关的知识,希望对你有一定的参考价值。

我正在.Net Core 2.2项目中使用NLog。

我想使用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 id和名称,然后将事件记录为LogInformation。

我的问题是:

  1. 如何使用自定义功能扩展记录器?
  2. 这是为NLog实施类别系统的错误/非理想方法吗?我是否应该像我当前所做的那样在编写日志时定义EventId?

我觉得这应该是相对简单的,但是我的谷歌搜索技能目前似乎使我感到失望。

答案

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的不错选择。

以上是关于创建用于使用NLog记录的自定义扩展功能的主要内容,如果未能解决你的问题,请参考以下文章

NestJs 创建用于记录的自定义服务 - 不打印输出

列表视图的搜索功能

.NET Core平台日志记录框架:NLog+Mysql

尼康z9nlog怎么开

如何将 SwipeCellKit 的自定义滑动功能用于从 .xib 文件创建的自定义单元格?

如何使用 NLog 以功能方式登录 F#