浏览 4908 次
锁定老帖子 主题:log4j 性能问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (6) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-23
最后修改:2009-10-23
在使用 log 之前,使用 isXXXEnabled() 函数来判断日志等级以提高程序性能。 不记得在哪看到讲现在的 log4j 版本不需要使用 isXXXEnabled() 函数来改进性能了。现在也找不到出处,看了下 log4j 代码(version 1.2.15),如下: public boolean isDebugEnabled() { if(repository.isDisabled( Level.DEBUG_INT)) return false; return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel()); } public void debug(Object message) { if(repository.isDisabled(Level.DEBUG_INT)) return; if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) { forcedLog(FQCN, Level.DEBUG, message, null); } } 看来确实是不需要使用 isXXXEnabled() 函数来改进性能了。大家认为呢? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-10-23
zhouzhao21 写道 以前使用 log4j 时有条性能教条:
在使用 log 之前,使用 isXXXEnabled() 函数来判断日志等级以提高程序性能。 不记得在哪看到讲现在的 log4j 版本不需要使用 isXXXEnabled() 函数来改进性能了。现在也找不到出处,看了下 log4j 代码(version 1.2.15),如下: public boolean isDebugEnabled() { if(repository.isDisabled( Level.DEBUG_INT)) return false; return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel()); } public void debug(Object message) { if(repository.isDisabled(Level.DEBUG_INT)) return; if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) { forcedLog(FQCN, Level.DEBUG, message, null); } } 看来确实是不需要使用 isXXXEnabled() 函数来改进性能了。大家认为呢? isXXXEnabled() 是为了避免大量的拼接字符串 if(isDebugEnabled()) log.debug("error:"+error); 这里可以避免执行"error:"+error |
|
返回顶楼 | |
发表时间:2009-10-23
感谢楼上,受教了。
|
|
返回顶楼 | |
发表时间:2009-10-23
用 slf4j 更方便,支持parameterized messages Object entry = new SomeObject(); logger.debug("The entry is {}.", entry);
|
|
返回顶楼 | |
发表时间:2009-10-23
为啥不看官方文档?使用 isXXXEnabled() 函数来改进性能的原因在官方文档中说得非常清楚。
zhouzhao21 写道 以前使用 log4j 时有条性能教条:
在使用 log 之前,使用 isXXXEnabled() 函数来判断日志等级以提高程序性能。 不记得在哪看到讲现在的 log4j 版本不需要使用 isXXXEnabled() 函数来改进性能了。现在也找不到出处,看了下 log4j 代码(version 1.2.15),如下: public boolean isDebugEnabled() { if(repository.isDisabled( Level.DEBUG_INT)) return false; return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel()); } public void debug(Object message) { if(repository.isDisabled(Level.DEBUG_INT)) return; if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) { forcedLog(FQCN, Level.DEBUG, message, null); } } 看来确实是不需要使用 isXXXEnabled() 函数来改进性能了。大家认为呢? |
|
返回顶楼 | |
发表时间:2009-10-24
quaff 写道 zhouzhao21 写道 以前使用 log4j 时有条性能教条:
在使用 log 之前,使用 isXXXEnabled() 函数来判断日志等级以提高程序性能。 不记得在哪看到讲现在的 log4j 版本不需要使用 isXXXEnabled() 函数来改进性能了。现在也找不到出处,看了下 log4j 代码(version 1.2.15),如下: public boolean isDebugEnabled() { if(repository.isDisabled( Level.DEBUG_INT)) return false; return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel()); } public void debug(Object message) { if(repository.isDisabled(Level.DEBUG_INT)) return; if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) { forcedLog(FQCN, Level.DEBUG, message, null); } } 看来确实是不需要使用 isXXXEnabled() 函数来改进性能了。大家认为呢? isXXXEnabled() 是为了避免大量的拼接字符串 if(isDebugEnabled()) log.debug("error:"+error); 这里可以避免执行"error:"+error JDK5以后,已经不存在这个问题了。 可以看看反编译以后的源代码,编译的时候对+进行优化了。 |
|
返回顶楼 | |
发表时间:2009-10-25
xiaoych 写道 quaff 写道 zhouzhao21 写道 以前使用 log4j 时有条性能教条:
在使用 log 之前,使用 isXXXEnabled() 函数来判断日志等级以提高程序性能。 不记得在哪看到讲现在的 log4j 版本不需要使用 isXXXEnabled() 函数来改进性能了。现在也找不到出处,看了下 log4j 代码(version 1.2.15),如下: public boolean isDebugEnabled() { if(repository.isDisabled( Level.DEBUG_INT)) return false; return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel()); } public void debug(Object message) { if(repository.isDisabled(Level.DEBUG_INT)) return; if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) { forcedLog(FQCN, Level.DEBUG, message, null); } } 看来确实是不需要使用 isXXXEnabled() 函数来改进性能了。大家认为呢? isXXXEnabled() 是为了避免大量的拼接字符串 if(isDebugEnabled()) log.debug("error:"+error); 这里可以避免执行"error:"+error JDK5以后,已经不存在这个问题了。 可以看看反编译以后的源代码,编译的时候对+进行优化了。 关键不是字符串拼接,而是避免可能的任何没有必要的消耗性能的操作 |
|
返回顶楼 | |
发表时间:2009-10-26
NanguoCoffee 写道 为啥不看官方文档?使用 isXXXEnabled() 函数来改进性能的原因在官方文档中说得非常清楚。
不好意思,没想到 API 上也会把这个写上去。主要是我以前好像看过有一出处讲“不需要使用 isXXXEnabled 方法”。 看了 API 说明(http://logging.apache.org/log4j/1.2/apidocs/index.html org.apache.log4j.Category) ,的确是如 quaff 所讲。 |
|
返回顶楼 | |