`
superfofo
  • 浏览: 128765 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

LOG4J的性能问题,慎用

阅读更多
有时很多东西都是细致方面的事,又可能脱离互联网太长时间了,碰到这个问题居然一时反应不过来了,其实在生产系统把log4j的级别跳到debug或者info其实可想而知,不断地写日志文件,对系统本来就是一种消耗,少日志,少人用没有关系,一旦并发,数据上来之后,这个消耗是灾难性的。
应用逻辑里面打的日志量不会太多,更多情况下可能是对sql的日志和spring等等的通用插件的日志没有做好控制而导致你的日志文件在不断地刷屏。
针对此,网上的一些资料也验证了这个见解,归纳如下:

对于log4j的性能,我没有做细致的度量。抛开log4j来说,日志操作主要性能耗在输出上,所以输出的日志内容越少越好。除此之外,log4j使用上有两点需要注意:
1、在生产环境中,我们通常是关掉debug级别的,但如果程序中debug函数很多,还是会带来性能问题。因为debug函数输出的就是些调试信息,所以其参数通常是多个字符串+操作构成,这种经典的构造多个临时对象的做法显然会有些性能消耗;更有甚者会调用诸如object.toString方法,而这个被覆盖的方法很可能是将对象内的诸多属性拼凑成字符串输出,对性能有高要求的场景就很不合适。在一些基础库或框架中,就可能会看到下面的代码片断来避免性能问题,其中的isDebugEnabled只是个判定操作,在logger层次不复杂的情况下,没有什么性能损失:

if(logger.isDebugEnabled() {
logger.debug(......);
}2、复杂的logger层级也会带来性能问题。好的方面是,通常我们指定root logger就够了。


而当你的日志足够地专业,一些日志不可不打的时候,世间上的大牛已为大家准备了更好的解决方案,可参考这位领导的:http://raymondhekk.iteye.com/blog/229937
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics