博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Log4j中为什么设计isDebugEnabled()方法
阅读量:6914 次
发布时间:2019-06-27

本文共 1305 字,大约阅读时间需要 4 分钟。

转自:https://www.jianshu.com/p/e1eb7ebfb21e

先看下面的代码,在真正执行logger.debug()之前,进行了logger.isDebugEnabled()的判断,既然log4j.properties已经配置了log level为debug, 为什么还需要这个判断?

if (logger.isDebugEnabled()) {    logger.debug("Entry number: " + i + " is " + entry[i].toString());}

加上这个logger.isDebugEnabled() 后,如果值为false,if里面的代码就不会执行,就节省了字符串的拼接,少生成几个对象,如果不加,总会先拼接里面的字符串(连接字符串最好也不用+)

如果不用logger.isDebugEnabled(), 请使用log4j的其他重载的方法, 比如下面的

ogger.debug("Entry number: {} is {}", i, entry[i]);

这个代码实际上会先判断debug是否是enabled, 只有enabled才会format里面的字符串,下面就是log4j的源码:

@Override    public void debug(final String message, final Supplier
... paramSuppliers) { logIfEnabled(FQCN, Level.DEBUG, null, message, paramSuppliers); } @Override public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Message msg, final Throwable t) { if (isEnabled(level, marker, msg, t)) { logMessageSafely(fqcn, level, marker, msg, t); } } @Override public boolean isEnabled(final Level level, final Marker marker, final String message, final Throwable t) { return privateConfig.filter(level, marker, message, t); }

一句话总结一下:logger.isDebugEnabled()为了提高某些情况下的性能才设计的。

参考:

作者:奔跑的笨鸟 链接:http://www.jianshu.com/p/e1eb7ebfb21e 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
你可能感兴趣的文章
一些小功能实现
查看>>
前端学习 -- Css -- 行间距
查看>>
android图像处理(3) 浮雕效果
查看>>
实时视频应用之QoS关键技术分析
查看>>
【Asp.net之旅】--因自己定义控件注冊而引发的思考
查看>>
RAD Studio XE8 技术研讨会讲义与范例程序下载
查看>>
quick-cocos2d-x开发工具sublime text及其强力插件QuickXDev
查看>>
VirtualBox修改现有VDI虚拟磁盘大小
查看>>
mac 10.12 sierra 机械键盘+ratm可编程鼠标记录
查看>>
jmeter用beanshell调用自己写的jar进行MD5加密
查看>>
调用系统相机相冊
查看>>
最简单的视音频播放演示样例7:SDL2播放RGB/YUV
查看>>
vector draw 试用期结束的 激活方法
查看>>
Oracle数据库软件标准版的一个限制:仅仅能用一个rman channel
查看>>
docker官方文档中的dns,link,expose,publish
查看>>
使用 redis “捕捉” “用户登录过期” 事件
查看>>
MyEclipse 8.5安装Aptana
查看>>
C#动态对象(dynamic)示例(实现方法和属性的动态)
查看>>
Objective-C之成魔之路【8-訪问成员变量和属性】
查看>>
支付宝支付-常用支付API详解(查询、退款、提现等)
查看>>