用于Commons Logging的isInfoEnabled()

时间:2013-01-15 11:47:35

标签: java logging log4j apache-commons-logging

我在我的应用程序中的很多地方使用logger.info("statement" + string),包括 for循环 if 语句。

我检查过并发现即使未启用“INFO”级别,也会先创建字符串消息。

如何在创建字符串之前检查INFO是否已启用,而不是在我实现字符串的每个位置添加isInfoEnabled()

此外,在使用记录器时减少开销的最佳方法是什么。

如果我们使用实用程序方法(如使用+返回连接字符串),那么如何更好,而不是Stringbuilder

我正在使用log4j.xml配置记录器控制杆。

2 个答案:

答案 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);
        }
    }

}