好文档 - 专业文书写作范文服务资料分享网站

log4j入门、详解 - 图文 

天下 分享 时间: 加入收藏 我要投稿 点赞

log4j入门、详解

6. 注意事项

6.1 为什么使用logger之前要判断日志输入级别?

经常看到代码中有这样的写法: if(logger.isDebugEnabled()){ logger.debug(AssessmentParamsUtils.getParams().toString()); } 有人就有疑问了,这个和下面直接debug的写法有什么区别? logger.debug(AssessmentParamsUtils.getParams().toString()); 我们来看一下源码:

debug方法的源码(log4j) public void debug(Object message) { if (repository.isDisabled(Level.DEBUG_INT)) return; if (Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) { forcedLog(FQCN, Level.DEBUG, message, null); } } isDebugEnabled方法的源码(log4j) public boolean isDebugEnabled() { if (repository.isDisabled(Level.DEBUG_INT)) return false; return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel()); } 其实判断是一样的,都判断了debug级别是否开启,这样看来,判断似乎没有区别,那为什么还要加这个判断呢?

答:为了性能。

其实原因不在debug上,而在日志输入的东西上,如果只输入简单的字符串,或者小对象,异常等等,那么这两个没有区别,建议就不用判断了,区别不大。

但是,一旦输出前执行了比较费时的方法,那么就很影响性能了,如上面这段中的 AssessmentParamsUtils.getParams().toString() 如果这句话执行需要1分钟,那么加判断的就一下子过去了,不执行这句话,而没有加判断的需要先执行这句话,1分钟后执行完毕,才去执行debug,一判断不输出,跳过,虽然结果一样,但是多执行了1分钟,严重影响了性能。现实中不会到1分钟的,这里的1分钟只是示例,但是高并发时,影响还是挺大的。 同理其他方法: logger.isDebugEnabled(); logger.isErrorEnabled(); logger.isFatalEnabled(); logger.isInfoEnabled(); logger.isTraceEnabled(); logger.isWarnEnabled(); 为了更健壮的代码,像这样的小细节以后也要多注意了。

16

log4j入门、详解 - 图文 

log4j入门、详解6.注意事项6.1为什么使用logger之前要判断日志输入级别?经常看到代码中有这样的写法:if(logger.isDebugEnabled()){logger.debug(AssessmentParamsUtils.getParams().toString());}有人就有疑问
推荐度:
点击下载文档文档为doc格式
573lx4q360565jb3utym
领取福利

微信扫码领取福利

微信扫码分享