说起日志打印,首先想到的就是e.printStackTrace()这个方法。
然而在生产环境中,尽量不要使用此方法。生产中,e.printStackTrace()除了不断地刷控制台,其余并没有什么作用。而我们排查问题,看的是日志文件,所以最重要的应该是要把异常信息写入日志文件啊。
此外,e.printStackTrace()会一层一层的输出问题。比如A extends B,B extends C。那么当A中出现异常的时候,会依次打印C,B,A的异常之处,信息量很大。显然这是很耗性能的。
因此,建议异常输出,采用@Slf4j的形式。
log打印有info,debug,error和warn四个级别,其中info是默认级别。
@Slf4j
public class LoggerPrint {
public void test2(){
log.debug("debug");
log.info("info");
log.error("error");
log.warn("warn");
}
}
这里单独说说error的打印方式。log.error有很多重载方法,使用不同的方法,呈现出的效果也各不相同。看看下面的一段代码,执行后三者对应的效果如下所示:
@Test
public void logTest(){
try{
int i = 1/0;
}catch (Exception e){
log.error("程序执行异常1:" + e.getMessage());
log.error("程序执行异常2:" + e);
log.error("程序执行异常3:", e);
}
}
可见,第三种方式打印了堆栈信息,最为详细。我们应尽量在日志文件中,以这种方式输出异常。