您的位置:首页 > 其它

Log4j详细介绍(三)----Log4j的优化

2013-06-06 19:35 281 查看
  Log4j内部使用了大量的优化,缓存工作,使输出时对服务器的压力,消耗的时间,资源等都达到最小。例如:

log.debug("debug信息");
log.warn("warn信息");


这两句日志可能被记录到日志文件中,但是写的过程不同于常规的打开文件,写文件,关闭文件等流程,频繁地打开文件,关闭文件需要消耗大量资源。Log4j只有初始化时候打开文件,并保持对文件的写控制,知道系统结束的时候才关闭文件。这样就使I/O次数达到最小,提高了效率。
  而当输出级别为ERROR时,log.debug(),log.waring()方法会因为输出级别小雨ERROR而直接返回,因此不会消耗太多的资源。debug()内部实现如下:

public void debug(Object message){
if (this.repository.isDisabled(10000))
return;
if (Level.DEBUG.isGreaterOrEqual(getEffectiveLevel()))
forcedLog(FQCN, Level.DEBUG, message, null);
}
}


虽然设置为ERROR时debug()会直接返回,但是下面的代码仍然会消耗额外的时间,原因是在执行debug()前,需要先将字符串进行连接。

log.debug("开始计算  "+i+" * "+j+" 次 运算");


如果想要避免这种消耗,最好使用isXxxEnable()或者isEnableFor()判断一下,例如:

if(log.isDebugEnabled())//如果debug级别可用
log.debug("开始计算  "+i+" * "+j+" 次 运算");//连接字符串,输出
if(log.isEnabledFor(Priority.WARN))//或者,如果warn可用
log.debug("开始计算  "+i+" * "+j+" 次 运算");// 连接字符串输出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: