我在我的应用程序中的很多地方使用logger.info("statement" + string)
,包括 for循环和 if 语句。
我检查过并发现即使未启用“INFO
”级别,也会先创建字符串消息。
如何在创建字符串之前检查INFO
是否已启用,而不是在我实现字符串的每个位置添加isInfoEnabled()
。
此外,在使用记录器时减少开销的最佳方法是什么。
如果我们使用实用程序方法(如使用+
返回连接字符串),那么如何更好,而不是Stringbuilder
。
我正在使用log4j.xml
配置记录器控制杆。
答案 0 :(得分:4)
正确的解决方案是使用slf4j / logback,它支持传入原始数据而无需预先生成字符串。使用Commons Logging无法完成此操作,如果将+
替换为StringBuilder
,性能将无法提高,因为字符串连接表达式已编译为涉及StringBuilder
的代码。
答案 1 :(得分:0)
我建议您为此创建实用程序调用,通过Logger
创建自己的体系结构 像这样的东西(伪代码,我不知道Logger的实现)class OwnLogger extends Logger {
public static function info(Object o){
if(isInfoEnabled()){
super.info(o);
}
}
}