我最近一直在想,从设计的角度来看,Log()和Log(LogLevel)之间有什么真正的区别吗?从设计的角度来看,Log()和Log(LogLevel)之间有什么区别吗?
例如,在log4net中,ILog接口的设计如下。
// Design A
public interface ILog
{
/* Log a message object */
void Debug(object message);
void Info(object message);
void Warn(object message);
void Error(object message);
void Fatal(object message);
// ... ignore more members
}
但我认为它相当于这样设计的。
// Design B
public enum LogLevel
{
Debug,
Info,
Warn,
Error,
Fatal
}
public interface ILog
{
/* Log a message object */
void Log(LogLevel level, object message);
// ... ignore more members
}
那么为什么log4net的不使用设计乙级?任何特定的原因?
我能想到的一个原因是设计A减少了调用者的代码噪声,以便每次指定类似LogLevel.Info的内容。
但是设计B也有一个好处,我们可以在一次调用中改变消息的严重性。例如logger.Log(some_bool_condition?LogLevel.Warning:LogLevel.Error)。但是,当然,我们可以创建一个类似于设计A的包装。
谢谢@samy!通过调用者,我指的是如你所说的调用日志功能的组件。所以从组件的角度来看,有没有真正的区别?我觉得组件调用logger.Error(“something”)等同于logger.Log(LogLevel.Error,“something”),对吧? – Quaker 2014-11-25 06:54:12
这就是代码中发生的事情,但正如我在第二部分所说的那样,当您调用Log.Error(...)时会做出有意识的决定;你说“这很重要”。 – samy 2014-11-25 07:46:31
我明白了。谢谢@samy! – Quaker 2014-11-26 05:11:31