slf4j是java的一種Log Api,類似Apache Commons Logging 。
這種用字符串拼接的構造方式在debug disabled的情況下,字符串消息還是會被求值,存在類型轉換和字符串連接的性能消耗。
isDebugEnabled()的方法在debug disabled的情況下不存在構造字符串參數的性能消耗,但是如果debug enabled,debug是否被enabled將會被求值兩次:一次是isDebugEnabled(),一次是debug()本身(該影響較小,因為求值logger狀態花費的時間比真正log一條語句花費的時間的1%都還要小)。
使用SLF4J的格式化功能,這種用法不存在上面提到的缺點。SLF4J使用自己的格式化語法{},同時提供了適合不同參數個數的方法重載:
logger.debug(String format, Object param); //支持一個參數logger.debug(String format, Object param1, Object param2); //支持兩個參數logger.debug(String format, Object... param); //任意數量參數,構造參數數組具有一定的性能損耗連續的{}才被認為是格式化占位符,所以:
logger.debug("Set {1,2} differs from {}", "3"); //output:Set {1,2} differs from 3logger.debug("Set {1,2} differs from {{}}", "3"); //output:Set {1,2} differs from {3}用”/”轉義{}占位符
logger.debug("Set //{} differs from {}", "3"); //output:Set {} differs from 3用“/”本身轉義“{}”中的”/”
logger.debug("File name is C:////{}.", "file.z新聞熱點
疑難解答