第一范文网 - 专业文章范例文档资料分享平台

log4j入门、详解 - 图文 

来源:用户分享 时间:2025/5/23 0:03:32 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

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入门、详解 - 图文 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c573lx4q360565jb3utym_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top