zoukankan      html  css  js  c++  java
  • 何时使用log4j的isDebugEnabled属性来进行日志记录?

    我经常见到这个问题,到底使不使用idDebugEnabled属性。这个问题经常被争论,而焦点往往是性能。

    答案很简单。既然有这个属性,当然是拿来使用的。但是使用的时候需要注意。

    例如,在我的代码中,我如下使用。

    Java代码
    1. log.debug("I am there");  

    这个例子是一个好的实践。

    然而如果我按照如下的方式来使用,我觉得就是不必要的了。
     

    Java代码
    1. // Not good practise   
    2. if (log.isDebugEnabled()){   
    3.     log.debug("I am there");    
    4. }   

    那么是为什么呢?这是因为类Category中的debug方法(由Log4j库的Logger类继承)已经检查了日志中的模式(即当前的日志级别)。org.apache.log4j.Category类中debug的代码如下:

    Java代码
    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. }   

    因此上面的例子中,我们可以不使用它来判断。那么什么时候需要使用isDebugEnabled属性呢?

    例如,你有一个很 长的参数要在debug模式下输出:

    Java代码
    1. // Bad Practise   
    2.  log.debug("XML "+Tree.getXMLText());   

    在这样的情况下,可以清楚的说,不要使用它。如果Tree.getXMLText方法从App中获取出来,但是没有使用的话,这样对性能会有很大的影响。因此,应该按照如下的方式来使用:

    Java代码
    1. // Good Practise   
    2. if (log.isDebugEnabled()){   
    3.     log.debug("XML "+Tree.getXMLText());   
    4. }  

    因此,在上面的例子中,使用log.isDebugEnabled()可以保证性能优化。

  • 相关阅读:
    B
    A
    P1057 传球游戏
    P1702 突击考试
    P1394 山上的国度
    P2117 小Z的矩阵
    P1510 精卫填海
    P1294 高手去散步
    P1071 潜伏者
    保留
  • 原文地址:https://www.cnblogs.com/sunwei2012/p/1690986.html
Copyright © 2011-2022 走看看