Logger异常日志,企业项目中非常重要的一步,在系统调试、出错时,能够快速排查,修复。以下是关于异常日志使用的关键点。
1、真正有意义的Logger
一些用户异常信息,是返回到View层显示给用户看的,那么在前端可能就能够完成处理(例如:提示两次输入的密码不一致),要么根本不是异常(例如:提示用户没有注册)。这样的用户异常不应该出现在异常日志中,而需要记录的是技术性异常(例如:“服务器编译文件未找到”),反映真正有意义的异常到logger中。
2、察觉需要捕获异常的代码块,进行捕获
后端在进行数据更新的时候, updat/savae、insert、delete没有正确执行,此时,用try…catch去捕获异常。
//使用日志类logger
import org.apache.log4j.Logger;
public class ActAreaServiceImpl implements ActAreaService{
//在编写类时,得到ActAreaServiceImpl.class产生的异常日志
private static final Logger logger = Logger.getLogger(ActAreaServiceImpl.class);
...
try{
//可能抛出异常的代码
//Service层多数情况是 updat/savae、insert、delete没有正确执行
}catch(Exception e) {
//捕获异常并在日志中打印出来
logger.error(e.getMessage(), e);
}
3、合理使用Logger框架的异常信息输出方法
运行中异常,错误信息异常,debug调试异常,Root时异常,了解、知道和会使用在常用的异常方法。
一般是logger.error()。
4、异常追踪堆栈的关键信息
异常框架在处理异常时,会保证打印输出所有相关的堆栈追踪信息,异常的所有原因记录在日志文件中,所以在调试代码时,最上层的异常就是程序异常的起因,这个信息是最重要的。
5、错误:记录日志后又向外抛出
记录日志后又重新抛出异常叫做——异常反模式(anti-pattern),不要这么做,冗余重复。
try{
...
} catch (Exception e) {
logger.error(e.getMessage(), e);
throw new RuntimeException(e.getMessage());
}
6、任何时候都不要使用System.out或者System.err记录来记录logger
Java发展至今,已经有非常多的日志框架了,要相信成熟的架构体系的异常处理。不成熟的程序员异常处理会有很多逻辑漏洞,不合理的地方,使用框架比你自己处理要更好。