`
huangxx
  • 浏览: 322560 次
  • 来自: ...
社区版块
存档分类
最新评论

什么情况需要 if (log.isDebugEnabled()) {}

阅读更多

在使用log4j,common-log这样的log框架时,发现很多代码中这样写
if   (log.isDebugEnabled())   {
          log.debug( "xxxx ");
}

我很奇怪,为什么要与log.isDebugEnabled()?既然log.debug()在没有指定输出级别为DEBUG时不会有输出,为什么还要在前面加一个isDebugEnabled()的判断?

为了效率,如果上述那个代码那么简单是没有必要的 

但是如果这样 
if   (log.isDebugEnabled())   { 
          log.debug(buildFullString()); 
} 

如果这个buildFullString效率不太高,那么如果直接写log.debug(buildFullString());的话 

虽然它不会打印语句,但是buildFullString还是被执行了,这样就白费了功夫 

所以加上isDebugEnabled就可以避免执行buildFullString了 

这个方法一般用在认为buildFullString这个函数效率不太高的情况下

 

加不加if,效果相同,但是效率不同 

在你的例子里,debug的参数就是一个string,所以没有太本质的差别 

但是假如log.debug( "map= "   +   map)的话,在调用debug之前,必然需要调用map.toString(),而这个操作可能导致更多的大量字符串操作,最后,才能得到这个辛辛苦苦拼接出来的结果,作为参数传入debug(),结果,这个参数却不需要(一般在log方法入口就判断输出level)。

  

分享到:
评论
4 楼 梦回秘蓝 2015-04-15  
whichisnotuse 写道
非也, 除非需要很执行一段代码为log准备数据,否则不需要对log级别进行判断。因为在log4j里已经先进行判断了。
源码如下:

  public void debug(Object message)
  {
    if (this.repository.isDisabled(10000))
      return;
    if (Level.DEBUG.isGreaterOrEqual(getEffectiveLevel()))
      forcedLog(FQCN, Level.DEBUG, message, null);
  }

判断日志级别源码log.isDebugEnabled()的源码如下:
  public boolean isDebugEnabled()
  {
    if (this.repository.isDisabled(10000))
      return false;
    return Level.DEBUG.isGreaterOrEqual(getEffectiveLevel());
  }

public void debug(Object message) 就是要节省参数message生成的时间
3 楼 helloint 2010-12-23  
不错,明白了
2 楼 kaowww153 2010-12-07  
非毛也
楼主写的很有道理
log4j判断了也无法阻止map.toString()的执行。
1 楼 whichisnotuse 2010-10-28  
非也, 除非需要很执行一段代码为log准备数据,否则不需要对log级别进行判断。因为在log4j里已经先进行判断了。
源码如下:

  public void debug(Object message)
  {
    if (this.repository.isDisabled(10000))
      return;
    if (Level.DEBUG.isGreaterOrEqual(getEffectiveLevel()))
      forcedLog(FQCN, Level.DEBUG, message, null);
  }

判断日志级别源码log.isDebugEnabled()的源码如下:
  public boolean isDebugEnabled()
  {
    if (this.repository.isDisabled(10000))
      return false;
    return Level.DEBUG.isGreaterOrEqual(getEffectiveLevel());
  }

相关推荐

    log4j详解配置说明

    if (log.isDebugEnabled()) { log.debug("Debug message"); } if (log.isInfoEnabled()) { log.info("Info message"); } if (log.isWarnEnabled()) { log.warn("Warning message"); } if (log....

    如何使用Log4j如何使用Log4j

    if (log.isDebugEnabled()) { log.debug("System property: " + System.getProperty("java.version")); } ``` 使用`isDebugEnabled()`方法判断当前Logger是否开启DEBUG级别,如果开启了,则调用`debug()`方法...

    log4j日志使用说明

    if (log.isDebugEnabled()) { log.debug("System ..."); } } } ``` #### 五、Log4j的高级特性 Log4j除了基本的日志记录功能外,还支持许多高级特性,比如: - **多语言接口**:不仅支持Java,还可以通过其他...

    log4j入门详解

    if (logger.isDebugEnabled()) { logger.debug("Debug message"); } ``` 总结而言,Log4j是一个非常强大的日志管理工具,通过合理的配置可以极大地提高日志记录的效率和可读性。无论是初学者还是经验丰富的...

    LOG4J开发案例

    if (log.isDebugEnabled()) { log.debug("This is a debug message."); } ``` #### 四、案例实践 为了更好地理解Log4j的使用方法,我们可以通过一个具体的案例来进行分析。假设有一个简单的Web应用程序,我们...

    log4j入门、详解.pdf

    if (logger.isDebugEnabled()) { logger.debug("Debug message"); } ``` 2. **性能优化**:尽管Log4j提供了丰富的配置选项,但在实际使用中也应注意性能问题。例如,频繁的日志输出可能会对系统的性能造成一定...

    log4j配置与使用方法

    - 为了减少性能开销,可以在代码中使用`if (log.isDebugEnabled()) { log.debug(); }`的方式来判断是否输出debug级别的日志。 3. **环境适应性**: - 对于不同的环境(如开发环境、测试环境、生产环境)可以采用...

    log4net网站项目应用实例

    if (log.IsDebugEnabled) { log.Debug("Debug message"); } ``` ### 9. 扩展和自定义 log4net提供丰富的扩展点,如自定义日志格式、过滤器、布局等,可以满足复杂日志需求。同时,它也支持与其他组件集成,如NLog...

    如何使用Log4j日志.rar

    通过在代码中使用`if (logger.isDebugEnabled()) {...}`,可以在运行时避免不必要的日志计算,因为如果日志级别高于DEBUG,这些代码将不会执行。 五、日志滚动和归档 Log4j的DailyRollingFileAppender允许每天生成...

    Log4Net使用指南

    if (log.IsDebugEnabled) { log.Debug("Debug message"); } // 其他日志级别同理 } } ``` 总结来说,Log4Net是一个强大的日志记录框架,它提供了一套完整的解决方案,使.NET开发者能够方便地集成日志功能,...

    log4j配置详解 新手入门教程

    if (log.isDebugEnabled()) { log.debug("This is a debug message."); } ``` 这里通过`LogFactory.getLog(getClass())`获取当前类的Logger对象,并通过`isDebugEnabled()`方法判断当前Logger是否开启了DEBUG级别...

    log4j 使用说明 很信息

    if (log.isDebugEnabled()) { log.debug("测试Log4j!"); } } } ``` 这段代码首先导入了必要的包,并创建了一个Log对象,然后使用`LogFactory.getLog()`方法获取一个Logger实例。接着通过`isDebugEnabled()`方法...

    JS中的log对象获取以及debug的写法介绍

    实例如下: 代码如下:var log = new Logger(‘***.js’)if (log.isDebugEnabled()) { log.debug(‘xxxxx’); }

    log4j的配置祥解和使用说明

    if (log.isDebugEnabled()) { log.debug("System ...."); } ``` 7. **自定义配置**:开发者可以根据需求自定义日志输出的级别、格式和目的地。例如,增加一个新的Appender来发送日志到网络服务器,或者改变日志...

    log4j的用法

    if (logger.isDebugEnabled()) { logger.debug("这是一个调试信息"); } if (logger.isInfoEnabled()) { logger.info("这是一条信息"); } if (logger.isWarnEnabled()) { logger.warn("这是一个警告信息"); } if ...

    log4j简单教程 希望大家喜欢

    if (log.isDebugEnabled()) { log.debug("This is a debug message."); } ``` 这段代码首先通过`LogFactory.getLog()`方法获取一个与当前类相关的`Log`实例。之后,可以通过调用`log.debug()`方法记录一条DEBUG...

    log4cxx_lib.rar

    if (logger->isDebugEnabled()) { logger->debug("Debug message"); } // ...其他代码 } ``` 以上代码首先获取名为"MyLogger"的Logger,然后配置日志系统。如果日志级别允许,就会输出"Debug message"。 总结...

Global site tag (gtag.js) - Google Analytics