• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

log.isDebugEnabled()的作用

武飞扬头像
AaronJonah
帮助1

代码

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

  1.  
    if (log.isDebugEnabled()){
  2.  
        log.debug(message);
  3.  
    }

源码

isDebugEnabled()的源码:

  1.  
    public boolean isDebugEnabled() {
  2.  
    if(repository.isDisabled( Level.DEBUG_INT))
  3.  
    return false;
  4.  
    return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel());
  5.  
    }

debug()的源码:

  1.  
    public void debug(Object message) {
  2.  
    if(repository.isDisabled(Level.DEBUG_INT))
  3.  
    return;
  4.  
    if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) {
  5.  
    forcedLog(FQCN, Level.DEBUG, message, null);
  6.  
    }
  7.  
    }

可以看出在debug()里做了跟isDebugEnabled()一样的日志级别判断。

作用

进行日志打印预判断,提升代码运行效率,提高系统性能。

log.debug("this total is"   getTotal());

分析:

假设我们的日志设置比debug更高的级别,那这句话不会输出日志,但这个方法还是会调用进行if(repository.isDisabled(Level.DEBUG_INT))return。但调用这个方法,必须提供参数。要获得参数必须执行getTotal()方法返回结果拼接。假设这个获取参数的过程需要10秒钟,则系统会在花费10秒后决进入debug(),这显然很得不偿失。

   由于日志级别高于debug。虽然没有输出日志,却花费了10秒钟来构造参数。很显然系统消耗很大。尽管实际应用中几乎不可能有这种花10秒钟来构造这样一个参数的情况,但如果并发数大的话,这样写还是会影响系统的性能的。这个时候,就应该写成:

  1.  
    if(logger.isDebugEnabled()){
  2.  
    logger.debug("this total is" getTotal());
  3.  
    }

如果debug的参数很简单的话,也可以直接写 logger.debug(message)的。

logger.isDebugEnabled()只会使写日志的时间增加大概万分之一(官方说法)。如果不加此判断,系统可能需要花费更多的时间。程序中的任何地方放到并发的环境下,我们就得重新考虑了。

文章主要用于自己存档和供新手们参考。若您发现有什么问题,欢迎评论指正。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhibcihf
系列文章
更多 icon
同类精品
更多 icon
继续加载