logger4j的日誌輸出怎麼寫好?推薦格式

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);   //推薦
相關文章
相關標籤/搜索