【问题标题】:isInfoEnabled () for Commons LoggingisInfoEnabled () 用于共享日志记录
【发布时间】:2012-12-29 12:14:21
【问题描述】:

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

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

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

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

如果我们使用实用方法(例如使用Stringbuilder 返回连接的字符串)而不是+,那会更好。

我正在使用log4j.xml 来配置记录器杠杆。

【问题讨论】:

    标签: java logging log4j apache-commons-logging


    【解决方案1】:

    我建议您为此创建实用程序调用,您自己的 Logger 架构

    类似这样的东西(伪代码,我不知道 Logger 的实现)

    class OwnLogger extends Logger {
    
        public static function info(Object o){
            if(isInfoEnabled()){
                super.info(o);
            }
        }
    
    }
    

    【讨论】:

    • 我使用的是公共日志记录而不是 log4j。这可以用于公共日志记录吗?
    • @DebajyotiDas 这是任何日志记录实用程序的抽象,允许您将isInfoEnabled 仅放在一个位置。
    • 你能解释一下如何创建一个实用方法吗?
    【解决方案2】:

    正确的解决方案是使用 slf4j/logback,它支持传入原始数据而无需预先生成字符串。使用 Commons Logging 无法做到这一点,如果将 + 替换为 StringBuilder,性能也不会提高,因为字符串连接表达式已经编译成涉及 StringBuilder 的代码。

    【讨论】:

      猜你喜欢
      • 2010-09-22
      • 2020-01-01
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 2017-06-26
      相关资源
      最近更新 更多