打印日志时为什么要使用isDebugEnabled 、isInfoEnabled

    打印日志时为什么要使用isDebugEnabled 、isInfoEnabled


转载:https://blog.csdn.net/hjun01/article/details/41442567

对于打印的信息没有字符拼接或者对象(说白了没有tostring的方法调用),如果打印的信息是固定字符串的话,就加上面的判断和不加其实意义是一样的

log4j中log.isDebugEnabled(), log.isInfoEnabled()和log.isTraceEnabled()作用
项目在应用log4j打印Debug,Info和Trace级别的log时需要加上对应的三个方法进行过滤,代码如下:

if (log.isDebugEnabled()) {
    log.debug(" From: " + req.getFrom().toString() + 
                  " To: " + req.getTo().toString() + 
                  " CallId: " + req.getCallId() + 
                  " msg:" + msg);
}


其作用是因为Debug,Info和Trace一般会打印比较详细的信息,而且打印的次数较多,如果我们不加log.isDebugEnabled()等
进行预先判断,当系统loglevel设置高于Debug或Info或Trace时,虽然系统不会答应出这些级别的日志,但是每次还是会拼接
参数字符串,影响系统的性能。

2.错误的优化方法
部分编码人员因为不了解机制,从代码复用性和简洁性而言定义如下函数来封装

    private void debug(String msg) {
        if (log.isDebugEnabled()) {
            log.debug(msg);
        }
}


其实这种封装方式是错误的,因为当系统中调用debug(msg)函数还是出现字符串的拼接

猜你喜欢

转载自blog.csdn.net/xiao__jia__jia/article/details/87868751
今日推荐