• Log4j中为什么设计isDebugEnabled()方法


    转自:https://www.jianshu.com/p/e1eb7ebfb21e

    先看下面的代码,在真正执行logger.debug()之前,进行了logger.isDebugEnabled()的判断,既然log4j.properties已经配置了log level为debug, 为什么还需要这个判断?

    if (logger.isDebugEnabled()) {
        logger.debug("Entry number: " + i + " is " + entry[i].toString());
    }

    加上这个logger.isDebugEnabled() 后,如果值为false,if里面的代码就不会执行,就节省了字符串的拼接,少生成几个对象,如果不加,总会先拼接里面的字符串(连接字符串最好也不用+)

    如果不用logger.isDebugEnabled(), 请使用log4j的其他重载的方法, 比如下面的

    ogger.debug("Entry number: {} is {}", i, entry[i]);

    这个代码实际上会先判断debug是否是enabled, 只有enabled才会format里面的字符串,下面就是log4j的源码:

     @Override
        public void debug(final String message, final Supplier<?>... paramSuppliers) {
            logIfEnabled(FQCN, Level.DEBUG, null, message, paramSuppliers);
        }
    
        @Override
        public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Message msg,
                final Throwable t) {
            if (isEnabled(level, marker, msg, t)) {
                logMessageSafely(fqcn, level, marker, msg, t);
            }
        }
    
        @Override
        public boolean isEnabled(final Level level, final Marker marker, final String message, final Throwable t) {
            return privateConfig.filter(level, marker, message, t);
        }

    一句话总结一下:logger.isDebugEnabled()为了提高某些情况下的性能才设计的。

    参考:



    作者:奔跑的笨鸟
    链接:http://www.jianshu.com/p/e1eb7ebfb21e
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    yk20192320
    JS常用方法 限制用户输入的方法
    话说最强悍的团队,博客园团队!
    输入框打开禁用自动填充功能
    老生常谈:Asp.net MVC 3+ Jquery UI Autocomplete实现百度效果
    节日logo
    第一篇:Asp.net MVP模式介绍
    VBS 类
    《JavaScript编程精解》简明读书心得上
    Three.js源码阅读笔记1
  • 原文地址:https://www.cnblogs.com/sharpest/p/7894529.html
Copyright © 2020-2023  润新知