我在应用程序的许多地方都使用了logger.info("statement" + string)
,包括for循环和if语句。
我检查发现,即使未启用“ INFO
”级别,也首先创建了字符串消息。
如何在创建字符串之前检查INFO
是否已启用,而又没有在我实现它的每个位置添加isInfoEnabled()
的情况。
另外,使用记录器时减少开销的最佳方法是什么。
如果不使用+
而不是使用Stringbuilder
返回连接字符串的实用方法,那会更好。
我正在使用log4j.xml
来配置记录器控制杆。
最佳答案
正确的解决方案是使用slf4j / logback,它支持传入原始数据而无需预先生成字符串。对于Commons Logging,如果将+
替换为StringBuilder
,则无法完成此操作,并且性能也不会提高,因为字符串连接表达式已被编译为涉及StringBuilder
的代码。