繁体   English   中英

避免启用Log4j / Slf4j调试检查

[英]Avoid Log4j/Slf4j debug enabled checks

几乎在每个项目中,我都使用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表达式的描述在这里使用,所以你的情况的调试(消息,供应商),

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

如果您不能使用log4j2或java 8,请查看log4j中对象渲染的概念。 您可以为特定的类设置您自己的对象渲染器,与渲染该对象相比,其构造要便宜(涉及到calculateDataFromSeveralDataSourcesDuh调用)。 假设仅调试信息的一部分计算成本很高,那么可能有必要识别这些情况并为其创建自定义类(以及相应的对象渲染器)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM