我正在考慮將java 1.4.2項目從log4j遷移到slf4j。這是參數化日誌記錄和代碼清晰度的優點(如果使用log.isdebug,則不需要)。這引起我的注意。使用slf4j與log4j和單獨使用log4j是否有任何性能開銷?
是否有轉換爲slf4j的性能開銷?
上次我檢查了是否可以使用logback,它對jdk的要求至少是1.5,這就是爲什麼我正在考慮slf4j和log4j。
我正在考慮將java 1.4.2項目從log4j遷移到slf4j。這是參數化日誌記錄和代碼清晰度的優點(如果使用log.isdebug,則不需要)。這引起我的注意。使用slf4j與log4j和單獨使用log4j是否有任何性能開銷?
是否有轉換爲slf4j的性能開銷?
上次我檢查了是否可以使用logback,它對jdk的要求至少是1.5,這就是爲什麼我正在考慮slf4j和log4j。
不,你應該從SLF4J獲得性能上的優勢,如果有的話,因爲(如果你使用參數化的消息),然後slf4j defers turning its parameters to strings until it has checked that the message won't be filtered out by log level:
存在着基於消息的格式非常方便的選擇。假設入口是一個對象,你可以寫:
Object entry = new SomeObject();
logger.debug("The entry is {}.", entry);
評估是否記錄或沒有,只有當決定是肯定的,將記錄器執行格式化消息並更換後的「{} '與條目的字符串值配對。換句話說,這種形式在日誌語句被禁用的情況下不會產生參數構造的成本。
以下兩行將產生完全相同的輸出。但是,如果禁用日誌記錄聲明,第二種形式的表現將優於第一種形式至少30。
logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);
你有這麼一些性能測試和比較結果嗎? –
logback可以反編譯爲1.4。我這樣做,它的工作,但我會建議廣泛的測試是肯定的。請注意,您也可以使用slf4j標準的JDK14日誌記錄。 –