创建用于使用 NLog 进行日志记录的自定义扩展函数
Creating custom extension functions for logging with 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。
我的问题是:
- 如何使用自定义函数扩展记录器?
- 这是实现 NLog 分类系统的 wrong/non-ideal 方式吗?我是否应该在编写日志时定义 EventId,就像我目前正在做的那样?
我觉得这应该比较简单,但我的谷歌搜索技术似乎让我失望了。
LogInformation
来自Microsoft abstraction(不是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);
}
}
Is this the wrong/non-ideal way to implement a category system for NLog? Should I rather define the EventId as I'm writing the logs, like I'm doing currently?
我觉得这个方法不错。还有其他方法可以进行抽象,但在我看来,这是一个不错的选择。
我在 .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。
我的问题是:
- 如何使用自定义函数扩展记录器?
- 这是实现 NLog 分类系统的 wrong/non-ideal 方式吗?我是否应该在编写日志时定义 EventId,就像我目前正在做的那样?
我觉得这应该比较简单,但我的谷歌搜索技术似乎让我失望了。
LogInformation
来自Microsoft abstraction(不是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);
}
}
Is this the wrong/non-ideal way to implement a category system for NLog? Should I rather define the EventId as I'm writing the logs, like I'm doing currently?
我觉得这个方法不错。还有其他方法可以进行抽象,但在我看来,这是一个不错的选择。