1、代码
package com.fbank.dis_common.utils;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class ErrorLog {
public static void error(Exception e, Object obj){
StackTraceElement[] stackTrace = e.getStackTrace();
String name = obj.getClass().getName();
List<String> list = new ArrayList<>();
for (int i = 0; i < stackTrace.length; i++) {
String stack = stackTrace[i].toString();
if(stack.contains(name)){
list.add(stack);
}
}
//TODO 项目中用logger.error()取代System.out.println
System.out.println(list.toString() + " >>>>>>>>>ERROR>>>>>>>>> " + e.toString());
}
public static void test(){
try {
throw new NullPointerException();
} catch (Exception e) {
error(e, new ErrorLog());
}
}
public static void main(String[] args) {
test();
}
}
2、效果():
[com.fbank.dis_common.utils.ErrorLog.test(ErrorLog.java:29), com.fbank.dis_common.utils.ErrorLog.main(ErrorLog.java:36)] >>>>>>>>>ERROR>>>>>>>>> java.lang.NullPointerException
3、设计思想:
1)我现在做的项目,不允许日志输出到 catalina.log 日志中,即不允许 e.printStackTrace();
2)业务日志只能输出到指定的目录: /home/tomcat/logs/app.log
3)对于已经 try catch 了的代码,只打印 e.getMessage() 或 e.toString(),信息不够完整,不知道从哪个类的哪一行抛出来的异常