Java Exception的日志输出
程序员文章站
2022-05-12 23:08:35
...
最近项目中使用多线程,需要将catch到的 Exception 与其他日志信息一起输出,否则日志会比较杂乱不太好准确定位。那么Java Exception到底有哪些信息呢?
Exception 中的方法都是继承 Throwable 类的方法
一般catch到Exception,我们会直接用 e.printStackTrace() 方法输出exception 的完整堆栈信息。但如何取出跟 printStackTrace() 方法相同的输出信息呢?写个例子看一下:
我这边用 org.slf4j.Logger 来记录日志,pom.xml 中引用
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
log4j.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] (%c:%L) - %m%n" />
</layout>
</appender>
<root>
<priority value="info" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
示例
public class ExceptionPrintMessageTest {
public static final Logger log = LoggerFactory.getLogger(ExceptionPrintMessageTest.class);
public static void main(String[] args) {
try {
ExceptionPrintMessageTest.errorMethod();
} catch (Exception e) {
log.error("localizaizedMessage : {}", e.getLocalizedMessage());
log.error("exception message : {}", e.getMessage());
log.error("exception cause : {}", e.getCause());
log.error("exception suppressed : {}", e.getSuppressed());
//异常输出
log.error("exception toString and track space : {}", "\r\n" + e);
log.error(ExceptionPrintMessageTest.errorTrackSpace(e));
log.error("---------------------------------------------");
e.printStackTrace();
}
}
/**
* 制造异常的方法
*/
private static void errorMethod() {
String str = null;
System.out.println(str.toString());
}
/**
* 输出异常信息
* @param e
* @return
*/
private static String errorTrackSpace(Exception e) {
StringBuffer sb = new StringBuffer();
if (e != null) {
for (StackTraceElement element : e.getStackTrace()) {
sb.append("\r\n\t").append(element);
}
}
return sb.length() == 0 ? null : sb.toString();
}
}
从结果中来看,exception.toString() 和 exception.getTrackSpace() 方法可以完整的获取到 与printTrackSpace() 方法相同的信息。
这与 printTrackSpace() 方法是一致的
上一篇: 异常
下一篇: iOS-高仿支付宝手势解锁(九宫格)
推荐阅读