建议使用静态类进行日志记录

本文关键字:日志 记录 静态类 | 更新日期: 2023-09-27 17:58:31

我目前正面临一个与在WPF应用程序中记录消息有关的问题。

我保留了一个静态类,用于在整个应用程序中记录消息,其中包含一个函数

private SomeService service = new SomeService();
private void LogMessage(string message)
{
   service.Log(message);
}

我的问题是在我的屏幕上,我需要记录,我在屏幕的不同位置附加字符串,并将其传递给LogMessage函数。我有非常大的数据要从屏幕的不同地方记录下来。

现在我面临的问题是引入了一个新成员,即

public bool IsLoggingEnabled = false;

现在我需要在每次添加类似的字符串之前检查这个条件

if(ClassName.IsLoggingEnabled)
{
    var msg = string.Format("Log 1 : {0}, Log 2 : {1}, Log 3 : {2} .... ", 0,1,2);
}
if(ClassName.IsLoggingEnabled)
{
    msg += string.Format("Log 4 : {0}, Log 5 : {1}, Log 6 : {2} .... ", 4,5,6);
}
...............
ClassName.LogMessage(msg);

你能为处理这种情况提出一个解决方案吗?附加所有消息并最终检查条件是否好。或者在LogMessage函数中检查条件?

但我觉得这些都是错误的。如有任何建议,我们将不胜感激。

建议使用静态类进行日志记录

您可以在登录类中检查此参数,并使其对您使用它的其他地方透明:

private void LogMessage(string message) 
{ 
    if(ClassName.IsLoggingEnabled)
    {
        service.Log(message); 
    }
}

关于字符串连接,为什么不把它写在单独的日志中呢?每个日志都有自己的调用。使代码更清晰,状态更少。

最后,我认为一个更好的实现是让你的类依赖于一个ILogger实例,然后直接使用它。在某个地方,它会被初始化并传递给你的类。这将使您更容易更改日志记录类和测试其他类。

使用当前实现,IsLoggingEnabled属性可以移动到静态LogMessage,并且可以在加载项目时、通过代码或从外部配置文件设置该属性一次。