Log4j详细介绍(三)----Log4j的优化
2013-06-06 19:35
281 查看
Log4j内部使用了大量的优化,缓存工作,使输出时对服务器的压力,消耗的时间,资源等都达到最小。例如:
这两句日志可能被记录到日志文件中,但是写的过程不同于常规的打开文件,写文件,关闭文件等流程,频繁地打开文件,关闭文件需要消耗大量资源。Log4j只有初始化时候打开文件,并保持对文件的写控制,知道系统结束的时候才关闭文件。这样就使I/O次数达到最小,提高了效率。
而当输出级别为ERROR时,log.debug(),log.waring()方法会因为输出级别小雨ERROR而直接返回,因此不会消耗太多的资源。debug()内部实现如下:
虽然设置为ERROR时debug()会直接返回,但是下面的代码仍然会消耗额外的时间,原因是在执行debug()前,需要先将字符串进行连接。
如果想要避免这种消耗,最好使用isXxxEnable()或者isEnableFor()判断一下,例如:
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+" 次 运算");// 连接字符串输出
相关文章推荐
- android listview 优化几种写法详细介绍
- sql优化详细介绍学习笔记
- GCC PGO 适应性优化 PHP7 编译详细介绍
- android listview优化几种写法详细介绍
- Mysql 优化详细介绍
- Untiy3d-unity游戏性能优化-详细介绍
- 优化mysql的性能,详细介绍Mysql的配置my.cnf的参数
- Java I/O 操作及优化详细介绍
- android listview优化几种写法详细介绍
- android listview优化几种写法详细介绍
- android listview优化几种写法详细介绍
- Log4j详细介绍
- 不要写完代码就束之高阁,适当地优化代码结构,能够为以后的开发带来许多方便,这《重构:改善既有代码的设计》就向你介绍了这方面的技巧,说得非常详细。
- 【详细介绍windowsXP系统优化的方法大全】
- Oracle的RBO和CBO详细介绍和优化模式设置方法
- android listview优化几种写法详细介绍
- Javascript优化技巧之短路表达式详细介绍
- Log4j详细介绍(七)----日志格式化器Layout
- log4j文件的配置的详细介绍
- log4j详细的常用配置说明介绍