现象
存在下面两则示例:
示例一:该不该记录日志?
catch (SocketException e)
{
LOG.error(“server error”, e);
throw new ConnectionException(e.getMessage(), e);
}
示例二:记什么级别日志?
在用户登录系统中,每次失败登录:
LOG.warn(“Failed to login by “+username+”);
解决
-
移除日志记录:
- 在遇到需要re-throw的异常时,如果每个人都按照先记录后throw的方式去处理,那么对一个错误会记录太多的日志,所以不推荐如此做;
- 但是如果re-throw出去的exception没有带完整的trace( 即cause),那么最好还是记录下。
- 如果恶意登录,那系统内部会出现太多WARN,从而让管理员误以为是代码错误。可以反馈用户以错误,但是不要记录用户错误的行为,除非想达到控制的目的。
启示
日志改不改记?记成什么级别?如何记?这些都是问题,一定要根据具体情况,需要考虑:
- 是用户行为错误还是代码错误?
- 记录下来的日志,能否能给别人在不造成过多的干扰前提下提供有用的信息以快速定位问题。