繁体   English   中英

使用 NLog 创建用于日志记录的自定义扩展函数

[英]Creating custom extension functions for logging with NLog

我在 a.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 不错的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM