zoukankan      html  css  js  c++  java
  • isDebugEnabled有什么用?

    这几天在读Spring MVC源码时,发现了如下代码:

    if (logger.isDebugEnabled()) {
        logger.debug("Using ThemeResolver [" + this.themeResolver + "]");
    }
    

    初看有些不解,觉着在设置了高于debug级别的log输出时,logger.debug(...)原本就不会输出,为什么还需要logger.isDebugEnabled()。

    在org.apache.commons.logging.Log的代码注释中找到了答案:

     * <p>Performance is often a logging concern.
     * By examining the appropriate property,
     * a component can avoid expensive operations (producing information
     * to be logged).</p>
     *
     * <p> For example,
     * <code><pre>
     *    if (log.isDebugEnabled()) {
     *        ... do something expensive ...
     *        log.debug(theResult);
     *    }
     * </pre></code>
     * </p>
    

    也就是说,是为了避免一些logger.debug(...)准备工作的执行,从而提高性能。至于本文提到的例子,应该属于最简单的情况,避免无用的String参数拼接。

    相应的,也不是只有debug级别才有这个方法,每一个log级别都有对应的enabled方法供调用。org.apache.commons.logging.Log接口的代码如下,供参考。

    public interface Log {
    
        // ----------------------------------------------------- Logging Properties
    
        public boolean isDebugEnabled();
        public boolean isErrorEnabled();
    
        public boolean isFatalEnabled();
    
        public boolean isInfoEnabled();
    
        public boolean isTraceEnabled();
    
        public boolean isWarnEnabled();
    
        // -------------------------------------------------------- Logging Methods
    
        public void trace(Object message);
    
        public void trace(Object message, Throwable t);
    
        public void debug(Object message);
    
        public void debug(Object message, Throwable t);
    
        public void info(Object message);
    
        public void info(Object message, Throwable t);
    
        public void warn(Object message);
    
        public void warn(Object message, Throwable t);
    
        public void error(Object message);
    
        public void error(Object message, Throwable t);
    
        public void fatal(Object message);
    
        public void fatal(Object message, Throwable t);
    
    }
    
  • 相关阅读:
    javascript简繁转换函数
    在嵌套的repeater中加ItemDataBound事件
    asp.net url重写方法和步骤
    打开,另存为,属性,打印"等14个JS代码
    php中global的用法
    ini_get
    PHP学习笔记
    PHP isset()与empty()的使用区别详解
    PHP符号说明
    html禁止清除input文本输入缓存
  • 原文地址:https://www.cnblogs.com/xinzhao/p/4876720.html
Copyright © 2011-2022 走看看