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); //推荐