gpt4 book ai didi

java - 避免启用 Log4j/Slf4j 调试检查

转载 作者:行者123 更新时间:2023-11-30 07:46:39 24 4
gpt4 key购买 nike

几乎在每个项目中,我都使用 Log4j 或 Slf4j 和 logback 来记录事件,几乎在所有地方我都必须编写类似的内容

if (log.isDebugEnabled()) {
log.debug("I'm here doing this stuff");
}

有时您看不到所有这些日志记录代码的实际方法逻辑。我无法删除 log.isDebugEnabled() 检查,因为即使我将 Slf4j 与 {} 功能一起使用,如果调试(或任何级别)未启用,某些日志信息也可能会被计算并删除已启用。

log.debug("Here is the data: {}", calculateDataFromSeveralDataSourcesDuh());

问题是:有没有办法推迟日志信息计算,以便仅在启用适当的日志级别时才计算日志信息,而不检查应用程序代码?

如果我无法使用 Java 8 并且正在使用 Slf4j api,因此 Log4j2 不可用,有哪些可能的选项?

最佳答案

通过使用 Log4j2 和 Java 8,您可以轻松地使用 lambda,如 here 中所述。 ,所以在你的情况下使用 debug(Message, Supplier)例如

    log.debug("Here is the data: {}", () -> calculateDataFromSeveralDataSourcesDuh());

如果您无法使用 log4j2 或 java 8,请查看 object rendering 的概念在 log4j 中。您可以为特定类设置自己的对象渲染器,与渲染它相比,其构造会更便宜(涉及您的calculateDataFromSeveralDataSourcesDuh 调用)。假设只有部分调试信息的计算成本很高,那么识别这些情况并为它们创建自定义类(以及相应的对象渲染器)可能是值得的。

关于java - 避免启用 Log4j/Slf4j 调试检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33824669/

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