关于Java日志的注意事项
2017-11-29 10:23
393 查看
关于Java日志的注意事项
1. 使用抽象日志框架
尽量使用slf4j或commons-logging等抽象日志框架,而不是具体的 logging(jdk 自带的)、log4j1、log4j2、logback等具体实现关键框架。这样可以在保证不修改代码的情况下,很方便的实现底层日志框架的更换。
2. 消除isDebugEnabled()
尽量使用slf4j,而不是commons-logging,推荐使用下面slf4j提供的第三种写法。从可读性和系统效率来说, slf4j比log4j都要优秀(log4j涉及到字符串连接和toString()方法的调用). 这里的{}带来的另一个好处, 我们在尽量不损失性能的情况,不必为了不同的日志输出级别, 而加上类似isDebugEnabled()判断.
第一种写法: log.debug("Found " + records.keySet().toString() + " records matching filter: '" + filter + "'"); 缺点:当日志级别提高到debug以上时,这条日志不会输出,但是records.keySet().toString()仍然会进行,字符串仍然会进行拼接 第二种写法: if(log.isDebugEnabled()) log.debug("Found " + records.keySet().toString() + " records matching filter: '" + filter + "'"); 缺点:虽然没有第一种写法的缺点,但是不专注于业务逻辑 第三种写法(推荐使用这种写法): log.debug("Found {} records matching filter: '{}'", records.keySet().toString(), filter);
3. 正确认识日志级别
不同的日志框架有不同的日志级别,但主要可以分为3类:用于显示调试信息,代表:debug,一般用于开发阶段,给开发人员看的
用于显示正常信息,代表:info,一般用于线上正式环境,给运营和运维人员看的
用于输出错误信息,代表:error,可以用于所有环境,给开发或测试人员看的
slf4j的日志级别如下表所示:
调试信息 | 正常信息 | 错误信息 |
---|---|---|
trace、debug | info | warn、error |
trace主要用来打印一些“踪迹”,如函数间的相互调用关系,函数的参数和返回值等现场信息;
warn主要用来打印一些“警告”,如函数参数传入错误等,不会造成系统严重错误的警告信息。
区分warn和error:
人为错误用warn:比如多个if条件,由于输入的不同,当进入到某个if分支时,为了不让程序继续进行而抛出异常,这里可以用warn记录。
系统错误用error:比如系统rpc远程调用发生错误那不到数据,应该用error记录。
参考:
[1] 正确使用日志的10个技巧
相关文章推荐
- java中关于拓展赋值运算符的注意事项!!
- 黑马程序员——关于Java中变量的意义和注意事项
- 关于 调用 JNI JAR 的说明和注意事项,调用第三方 JAR SDK 和 翻译 安卓 JAVA 代码 的说明 V2015.6.10 (转)
- 关于JAVA数组的几点注意事项与一些低级错误
- 【工作日志】--关于Vue.js中<slot>的使用方法及注意事项
- 关于阿里云ACE中JAVA平台的一些注意事项
- Java中中关于Calendar类的几点注意事项
- Ubuntu中关于java尤其是Netbeans的注意事项(持续更新)
- 关于Java中变量的意义和注意事项
- JAVA关于Fat Jar打包注意事项
- 关于 调用 JNI JAR 的说明和注意事项,调用第三方 JAR SDK 和 翻译 安卓 JAVA 代码 的说明 V2015.6.10
- 关于java applet打包注意事项
- 讲解关于编写跨平台Java程序时的注意事项
- 关于Java程序员技能和面试注意事项
- 关于java中bufferedreader的一些注意事项
- (java)关于OJ中字符串通过空格分隔的情况,注意事项
- 关于java web中session的一些注意事项与总结
- 关于初学Java注意事项一
- java Log4j中debug日志注意事项
- 关于JAVA内存泄漏问题注意事项