我最近一直在想,從設計的角度來看,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