为什么有必要在JBoss中使用isTraceEnabled()函数?

jos*_*ain 7 logging jboss log4j

我正在使用org.jboss.logging.Logger类,似乎遇到了一种不协调.当我有错误或警告时,我只需要使用logger.error("error message")或者logger.warn("warning message")它将根据jboss-log4j.xml文件中的设置显示.

但是,基于现有的jboss代码,此讨论以及此链接,在使用跟踪时,必须首先确定是否使用了跟踪logger.isTraceEnabled().为什么看来我必须单独追踪这个?

ska*_*man 12

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

我已经看到其他高质量的代码库对DEBUG和INFO级别的日志记录也是如此,所以它不仅限于TRACE.

请参阅有关性能的log4j手册部分.

  • 正如您所知,这取决于您使用的记录器。例如,org.slf4j.impl.Log4jLoggerAdapter 在内部执行此检查,因此您根本不需要执行此操作。恕我直言,优秀的记录器在内部进行此检查最有意义,尤其是在它已经知道的情况下……您获得的唯一性能提升是,如果您的消息是以一种比调用 isTraceEnabled() 效率低的方式构建的( http://stackoverflow.com/questions/21281048/should-i-be-using-slf4j-istraceenabled-or-not) (2认同)