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