将记录器传递给静态类
本文关键字:静态类 记录器 | 更新日期: 2023-09-27 18:03:10
我在生产中有一个静态类。出于某种原因,我们需要替换这个类中的日志部分方法。(仍然是静态类不变)
现在我想传递一个记录器给它。日志记录器来自另一个类。
public static class OutputUtils
public static void LogInfo(string logMessage)
{
logger.LogInfo(logMessage);
}
在另一类中,我有
private readonly ILogger _logger;
public AnotherClass(ILogger logger)
{
_logger = logger;
}
internal static void LogDebug(string logMessage)
{
OutputUtils.LogInfo(logMessage);
}
是的,我想把_logger
传递给静态类OutputUtils
。如何?
最简单的更改是将记录器作为参数添加:
public static void LogInfo(ILogger logger, string logMessage)
{
logger.LogInfo(logMessage);
}
我将不添加静态属性到类,因为如果多个客户端试图设置该属性,那么您必须考虑线程安全。如果一个线程设置了日志记录器,另一个线程将属性设置为其他日志记录器,并且第一个线程调用LogInfo
,这将输出到其他线程的日志记录器,那么您可能会出现竞争条件。
但是这个方法的目的是什么呢?客户端为什么不直接调用logger.LogInfo(logMessage)
呢
以下代码可用于在静态类中添加记录器
private static void TemporaryLogger(string methodName, string lineNumber)
{
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
var logger = loggerFactory.CreateLogger(string.Empty);
logger.LogInformation($"Test Logger for className class: Identifier - {methodName} : Line number - {lineNumber}");
}