【发布时间】:2019-04-28 20:53:43
【问题描述】:
在我的项目中,我经常为我的日志消息添加前缀。
目前我正在这样做
logger.LogDebug(prefix + " some message");
我认为这是实现自定义记录器的好方法,在该记录器中我设置了前缀,记录器本身在每次记录某些内容时都会附加它。
所以我创建了我的自定义记录器类并实现了 ILogger 接口。但是我不明白如何使用
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
添加前缀的方法(它是自定义记录器类的成员)。
我的完整代码是:
public class CustomLogger : ILogger
{
private readonly ILogger _logger;
private string _logPrefix;
public CustomLogger(ILogger logger)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_logPrefix = null;
}
public ILogger SetLogPrefix(string logPrefix)
{
_logPrefix = logPrefix;
return this;
}
public IDisposable BeginScope<TState>(TState state)
{
return _logger.BeginScope(state);
}
public bool IsEnabled(LogLevel logLevel)
{
return _logger.IsEnabled(logLevel);
}
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
_logger.Log(logLevel, eventId, state, exception, formatter);
}
}
【问题讨论】:
-
类似
Func<TState, Exception, string> custom = (s, e) => _logPrefix + formatter(s, e)?并将_logger.Log(...formatter)替换为_logger.Log(...custom)
标签: asp.net-core .net-core asp.net-core-2.1