【写在前面】个人观点,如有错误还望指正。
【错误捕获】
1,e.getMessage(); 有些异常是无法取到值的,即可能为【null】
2,e.getStackTrace()[0]往往取不到有利于排错的信息。
3, logger.error(e);效果等同于e.getMessage();
4,程序未走catch块,且没有异常信息抛出?
try{
int a = 1/0;
} catch (ParseException e) {
System.out.println("666666666666666666");
e.printStackTrace();
}
catch里面的异常类不足以捕获程序中的异常类型,就GG了。
【方案】:ParseException 改为Exception
【建议捕获】
1,直接记录到日志文件: logger.error("exceptionObj",e);
2,e.printStackTrace 重定向到指定文件。【缺点】:格式很乱 【优点】:存实体类入库
【参考】
public static void printStackInfoToMap(Map<String,Object> logMap,Exception e){
PrintWriter printWriter = null;
Writer writer = null;
try {
writer = new StringWriter();
printWriter = new PrintWriter(writer);
e.printStackTrace(printWsriter);
printWriter.flush();
logMap.put("xxxx",writer.toString());
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if(printWriter != null){
printWriter.close();
}
if(writer != null){
try {
writer.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
【注意】: 日志如需入库
1,设计好索引
2, 日志数据定期迁移,历史日志定时清理
3,需要有日志开关控制,控制是否记录日志。