我在我的应用程序中使用
SLF4J
和 Logback
来记录基础设施。
我在任何日志之前使用 Logger.isDebugEnable()
方法,例如:
if(logger.isDebugEnable())
logger.debug('process transaction....')
上述代码的目标是:当日志级别不是
process transaction....
时,不要在堆中构造字符串Debug
。
我的问题是: 我的代码风格或直接
logger.debug('process transaction....')
不检查启用日志级别有好处吗?
这是 log4j 项目的遗产,不幸的是,slf4j API 使用字符串而不是对象使情况变得更糟(因此日志字符串的生成可能会被延迟)。 slf4j 引入了 {} 结构来规避这个问题,它允许您使用:
logger.debug("{}: {}", "MyClass", "Message to show to user");
记录器后端首先检查“is...Enabled()”,然后然后构造记录器字符串。
由于后端会自行检查,因此您不需要这样做,并且可以删除 if 子句,只留下记录器语句本身。