将记录器传递给静态类

本文关键字:静态类 记录器 | 更新日期: 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}");
    }