我正在.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。
我的问题是:
我觉得这应该是相对简单的,但是我的谷歌搜索技能目前似乎使我感到失望。
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的不错选择。