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);
    
    }
    
  • 相关阅读:
    MyBatis学习教程
    【转载】Spring MVC 整合 Freemarker
    Java高效编程之四【C语言结构的替代】
    String相关的问题
    接口与抽象类的区别
    Java Garbage Collection基础详解------Java 垃圾回收机制技术详解
    数据库事物、隔离等级及数据库锁机制
    hadoop 多表join:Map side join及Reduce side join范例
    Java IO设计模式彻底分析 (转载)
    傅里叶变换的智慧[转]
  • 原文地址:https://www.cnblogs.com/xinzhao/p/4876720.html
Copyright © 2011-2022 走看看