【问题标题】:check enable of logger level vs don't check in SLF4J\Logback检查记录器级别的启用与不检查 SLF4J\Logback
【发布时间】:2014-12-17 13:58:10
【问题描述】:

我使用SLF4JLogback 在我的应用程序中记录基础设施。 我在任何日志之前使用Logger.isDebugEnable() 方法,例如:

if(logger.isDebugEnable())
    logger.debug('process transaction....')

上述代码的目标是:当日志级别不是Debug时,不要在堆中构造字符串process transaction....

我的问题是: 我的代码风格或直接logger.debug('process transaction....') 之间是否有好处而不检查启用日志级别?

【问题讨论】:

    标签: java logging slf4j logback


    【解决方案1】:

    这是 log4j 项目的遗产。 slf4j 引入了 {} 构造,允许您使用:

    logger.debug("{}: {}", "MyClass", "Message to show to user");
    

    记录器后端首先检查“is...Enabled()”,然后然后构造记录器字符串。

    由于后端自行检查,您不需要这样做,并且可以删除 if 子句,只留下记录器语句本身。

    【讨论】:

    • 我理解你参数化日志字符串的方式,但我的意思不是,在java中发生方法调用时,输入参数构造和我的代码process transaction....字符串构造然后SLF4J检查日志级别启用。
    • 重写您当前的日志语句以使用 {} 并相应地传递参数。
    • 如果构造你的字符串来记录很便宜,那么没有区别。仅当您要构建大量从未真正进入日志文件的字符串时,此优化更改才有意义。
    猜你喜欢
    • 2015-08-13
    • 1970-01-01
    • 2020-08-07
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 2017-05-06
    • 1970-01-01
    相关资源
    最近更新 更多