Pass a logger to a static class

1 c#

I have a static class in the production. For some reason, we need to replace the logging part methods in this class.(Still a static class unchanged)

Now I want to pass a logger to it. The logger is from another class.

public static class OutputUtils   
public static void LogInfo(string logMessage)
{
    logger.LogInfo(logMessage);
}
Run Code Online (Sandbox Code Playgroud)

In another class, I have

private readonly ILogger _logger;
public AnotherClass(ILogger logger)
{
    _logger = logger;
}
internal static void LogDebug(string logMessage)
{
    OutputUtils.LogInfo(logMessage);
}
Run Code Online (Sandbox Code Playgroud)

是的,我想传递_logger给静态类OutputUtils。如何?

D S*_*ley 5

最简单的更改是将记录器添加为参数:

public static void LogInfo(ILogger logger, string logMessage)
{
    logger.LogInfo(logMessage);
}
Run Code Online (Sandbox Code Playgroud)

不会向类添加静态属性,因为如果多个客户端尝试设置该属性,则您必须考虑线程安全性。如果一个线程设置记录器,另一个线程将属性设置为其他某个记录器,并且第一个线程调用LogInfo将输出到另一个线程的记录器,那么您可能会遇到竞争条件。

但是这个方法的目的是什么?为什么客户不直接打电话logger.LogInfo(logMessage)