Logge有5個日誌等級 trace、debug、info、warn、error, 這5個級別都有5個以String爲首參數重載方法,如error性能
void error(String var1); void error(String var1, Object var2); void error(String var1, Object var2, Object var3); void error(String var1, Object... var2); void error(String var1, Throwable var2);
通常來講,這幾個方式的使用是:this
若是要輸出變量,經過{ } 佔位符,spa
logDemo.logger.error("11{},22{}", "aa", "bb"); // 不用+號拼接,這樣好處就是減小Stirng對象的產生,提升性能
若是要輸出異常,經過void error(String var1, Throwable var2)debug
logDemo.logger.error("",e);
那麼,若是要同時輸出變量和異常,只能2句嗎?日誌
logDemo.logger.error("11{},22{}", "aa", "bb"); // 不推薦 logDemo.logger.error("",e); // 不推薦
答案固然是否認的。在log4j裏, ParameterizedMessage 類的構造方法裏,有對最後一個參數的判斷邏輯對象
if (argsCount < arguments.length && this.throwable == null && arguments[arguments.length - 1] instanceof Throwable) {
this.throwable = (Throwable)arguments[arguments.length - 1];
--resultArgCount;
}
因此,只用一句就夠了。固然 , e 必須放在最後一個參數變量
logger.error("11{},22{}", "aa", "bb", e); //推薦