Logging with log4J isDebugEnabled
经常有人提出是否应该使用isDebugEnabled属性的问题。可以说大多数时候(甚至总是)这与性能有关。以下是我认为使用该属性时需要注意的重要事项。
答案很简单:这个属性就是被设计来使用的,但使用时需要谨慎。
例如,如果我在代码中使用以下行:
|
|
这是一个良好实践的示例。
但如果我这样做就真的过度了:
|
|
为什么这么说呢?这是因为log4j库中Logger类扩展的Category类中的debug方法本身就会显式检查日志记录模式。
从org.apache.log4j.Category类中提取的代码如下:
|
|
好的,这就是我们说不要使用它的情况。那么什么情况下我们确实应该使用isDebugEnabled属性呢?
例如,当你有大量参数需要传入debug时:
|
|
在这种情况下,可以明确地说"不要这样做!“如果Tree.getXMLText()方法会严重消耗应用性能,那么这样做就没有意义。因为字符串会先被构造,如果debug级别未启用,这将带来性能成本。
|
|
因此,在上面的例子中,使用log.isDebugEnabled()来确保性能消耗保持在较低水平是更明智的选择。