好吧,在閱讀了danben對這個post的回答之後,我想我確信需要寫這種代碼,至少在很多情況下。我的經理似乎也同意。如何在c#中重構log4net語句?
if (log.IsDebugEnabled)
log.Debug("ZDRCreatorConfig("+rootelem.ToString()+")");
if (log.IsInfoEnabled)
log.Info("Reading Configuration . . .");
它的問題是它錯誤的挫折感了我看到所有這些if語句隨處放置只是做了簡單的日誌語句。
我的問題是,我們如何可以將這個重構成一個類,而不會重現必須評估日誌方法參數的性能問題?
只要把它在一個類的靜態方法沒有幫助,因爲當你傳遞對象的消息仍必須評估參數:
public class LogHelper {
public static Info(ILog log, Object message) {
if(log.IsInfoEnabled) { log.Info(message); }
}
}
C#顯然不支持強制的方法內聯,因此解決方案不可用。 MACRO在C#中不受支持。我們可以做什麼?!?!
更新: 感謝您的回覆,我沒有忘記這個;這在我的名單上現在只是很低的優先權。一旦我陷入困境,我會去解決問題並給予答案。謝謝。
另一個更新:
好吧......我還沒有看到這一點,而且你們都值得正確的答案;但我同意Tanzelax的答案,因爲我認爲他們會自動內聯。他發佈的鏈接說服了我很好的工作,我現在不應該太擔心這個,這也是很好的笑聲。我以後會繼續關注這些lambda的事情。謝謝您的幫助!
您是否試過NLog? IMO NLog往往比Log4Net更清潔。 – 2010-02-11 22:34:25