2012-03-01 106 views
3

我使用org.jboss.logging.Logger类,似乎遇到了不协调。当出现错误或警告时,我只需使用logger.error("error message")logger.warn("warning message"),它将根据jboss-log4j.xml文件中的设置显示。为什么在JBoss中需要使用isTraceEnabled()函数?

但是,基于现有的jboss代码this discussionthis link,使用跟踪时,必须先使用logger.isTraceEnabled()确定是否启用跟踪。为什么看起来我需要这样做才能追踪?

回答

6

你不必“必须”。没有它,它就可以正常工作。但是,TRACE级别的日志记录往往是大量冗长的,并且可能占用大部分CPU时间,即使它最终没有实际记录到文件中。通过将if检查日志语句,可以避免这种开销。

我见过其他高质量的代码库也为DEBUG和INFO级别日志记录做同样的事情,所以它不仅限于TRACE。

查看log4j manual relating to peformance的部分。

+0

明白了 - 所以这只是一个表演的事情。有意义,特别是对于每个请求发生的信息级别的东西 – JoshC13 2012-03-01 16:48:49

+0

只要你知道,它取决于你使用的记录器。例如,org.slf4j.impl.Log4jLoggerAdapter会在内部进行检查,因此您根本不需要这样做。恕我直言,对于优秀的记录器来说,在内部进行这种检查是最有意义的,尤其是因为它已经知道了......只有当您的消息以比调用isTraceEnabled()更低效的方式构建时,才会获得性能提升。 http://stackoverflow.com/questions/21281048/should-i-be-using-slf4j-istraceenabled-or-not) – ndtreviv 2014-07-16 09:10:22

相关问题