使用格式化程序与Logger v / s检查isXEnabled

时间:2012-05-10 17:50:27

标签: java arrays slf4j variadic-functions

众所周知

LOGGER.debug("The parameter p1 cannot be " + p1 +
        ", it must be between " + P1_MIN + " and " + P1_MAX);

即使由于记录器设置而导致结果被丢弃,但仍然存在字符串连接的缺点。为避免这种情况,以下样板很流行

if (LOGGER.isDebugEnabled())
{
    LOGGER.debug("The parameter p1 cannot be " + p1 +
            ", it must be between " + P1_MIN + " and " + P1_MAX);
}

以三条额外的线为代价避免它。

slf4j(和其他人)使用varargs(和overloading)提供alternative

    LOGGER.debug("The parameter p1 cannot be {} , it must be between {} and {}", 
             p1, P1_MIN, P1_MAX);

这看起来更干净但是创建了Object array来传递可变数量的参数。

这个对象数组创建的成本是多少?它的成本是否超过了减少代码行的优势?

我怀疑基于varargs/formatter的方法是为了解决上述样板而创建的,所以尽管专家的一些主观回答会帮助很多程序员。此外,恕我直言,如果对象数组创建要么非常便宜(这是我的希望),要么非常昂贵,这不是主观的。

0 个答案:

没有答案