前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Log4j中isDebugEnabled作用

Log4j中isDebugEnabled作用

作者头像
Remember_Ray
发布2020-08-03 23:22:19
2.8K0
发布2020-08-03 23:22:19
举报
文章被收录于专栏:Ray学习笔记Ray学习笔记

参考1:isDebugEnabled作用 参考2:Java日志框架中真的需要判断log.isDebugEnabled()吗?

在项目中经常会看到这样的代码:

代码语言:javascript
复制
if (logger.isDebugEnabled()) {
    logger.debug(message);
}

为什么要这样做呢?

且看isDebugEnabled()的源码:

代码语言:javascript
复制
public boolean isDebugEnabled() {
  if(repository.isDisabled( Level.DEBUG_INT))  // Level范围值作为参数,返回true
    return false;
  return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel());
}

实际调用的是NOPLoggerRepository.isDisabled()

代码语言:javascript
复制
public boolean isDisabled(final int level) {
    return true;
}

再看debug()的源码:

代码语言:javascript
复制
public void debug(String msg) {
    this.logger.log(FQCN, Level.DEBUG, msg, (Throwable)null);
}

继续往下追踪log()的源码:

代码语言:javascript
复制
public void log(String callerFQCN, Priority level, Object message, Throwable t) {
  if(repository.isDisabled(level.level)) {
    return;
  }
  if(level.isGreaterOrEqual(this.getEffectiveLevel())) {
    forcedLog(callerFQCN, level, message, t);
  }
}

实际调用的也是NOPLoggerRepository.isDisabled()

代码语言:javascript
复制
public boolean isDisabled(final int level) {
    return true;
}

可见,debug()中做了跟isDebugEnabled()几乎一样的判断,看起来直接调用debug()比先判断isDebugEnabled()更加效率。


此时来看下面的代码:

代码语言:javascript
复制
log.debug("message:" + user.getMessage());

假如我们的日志级别为info,那么这句话不会被输出,但是这样写,这个方法还是会调用,因此getMessage()方法还是会执行。如果getMessage()这个方法过于复杂,需要很长时间来执行。而参数构造完之后,我们进入debug()方法进行判断

代码语言:javascript
复制
if(repository.isDisabled(level.level)) {
    return;
}

在这里就返回了。这样会导致我们什么都没有做但却耗费了时间,如果并发量大的时候,对性能的影响就比较明显了。假设这个获取参数的过程需要10秒钟,则系统会在花费10秒后决定return,这显然很得不偿失。

这个时候,出于性能的考虑,我们就应当添加isDebugEnabled()判断

代码语言:javascript
复制
if (logger.isDebugEnabled()) {
   logger.debug("message:" + user.getMessage());
}

但是如果是这样简单的输出:

代码语言:javascript
复制
logger.debug("error");

添加判断就没有必要了。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-15|,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com