gpt4 book ai didi

java - log.info 使用 log.isInfoEnabled

转载 作者:搜寻专家 更新时间:2023-10-31 08:14:00 25 4
gpt4 key购买 nike

我们正在使用 SLF4J

基于团队最近的讨论

if(LOG.isDebugEnabled()){
LOG.debug("hello " + a + " world" + b);
}

优于

LOG.debug("hello {} world {}", a, b);

因为在后一种情况下,即使未启用“调试”,也会创建字符串 hello {} world{}。换句话说,我们总是在创建字符串,即使它不是必需的。

我喜欢后一个版本,因为它显着提高了可读性。

有人可以提供意见吗?

问候,

沙都。

编辑

换个说法吧。

哪种方法更好或哪种方法被最广泛接受?

沙都。

最佳答案

不,较短的版本不会创建hello {} world {}”字符串。该字符串已经在编译和类加载期间创建并放入常量池中。您总是从常量池中引用相同的实例,它与引用常量 int 一样便宜。

但是字符串在第一种形式中创建的,因为您使用的是字符串连接。

唯一的额外开销是使用三个参数调用 LOG.debug,它在内部调用 isDebugEnabled() 时什么都不做。它也有可能被内联。

也就是说,在 99% 的情况下我会选择较短的形式。我会显式调用 isDebugEnabled 的唯一情况是计算要记录的消息的成本很高:

if(LOG.isDebugEnabled()){
LOG.debug("hello {} world {}", cheap, veryExpensive());
}

如果 veryExpensive() 非常昂贵,那么在它将被丢弃时避免调用它是明智的。顺便说一句 veryExpensive() 不应该有任何 side effects很难想象长期运行、无副作用的方法...

关于java - log.info 使用 log.isInfoEnabled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8788096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com