在开发一些大型系统(无论是C/S还是B/S)的时候,在代码中写一定量的log是必要的。其最主要的作用就是记录系统运行状况,方便问题的解析。
摘抄一下孙卫琴的《精通Struts:基于MVC的Java设计与开发》中的说明:
小一些的系统可能也会要求写log,这个就看系统的需求了。
根据我现有的经验,写log必须要注意以下几个事项。
1. 注意log级别的使用。
以log4j为例,log4j中的日志级别分为 LOG、DEBUG、INFO、WARN、ERROR、和fatal六个级别。其中系统在正常运行的时候一般会设置为INFO级,而代码中最多使用的log级别为DEBUG级。
如果级别使用混乱的话,比没有使用log还要问题大,因为大量的输出log是要消耗一定性能的。
2. log信息最好包含有类名,方法名等相关信息。便于解析bug的时候定位。
3. 输出的log内容应该为有效信息。输出无效信息不但是一种不遵守编码规范的表现,简直就是一种”犯罪“。
4. 注意输出的log内容的正确性。
经常会遇到的一点问题是输出类似于“xxx.getXXX()”的信息,如果xxx可能为null的话,那么毋庸置疑,这个状况一定会在系统运行的时候发生,想想那个时候客户会是什么样的想法。
所以,这是一个很重要的问题,要保证你的log的可用性,不能在log的地方出了bug。
5. 为性能方面的考虑,尽量在输出log之前调用isFatalEnabled()之类的方法判断是否允许当前的log级别。
※如果参数只是一个定死的字符串的话(如"xxxx"),不判断也是可以的。
※如果是类似于"xx" + "ccc" + value + "aaa"之类的组合字符串,或者需要计算之类的任务的话,那么事先判断就是必须的。因为在调用一个method的时候,总是先计算参数,然后执行method的。
暂时就这些总结,以后有新的经验的话,会追加进来。