java - 使用 SLF4J 简化延迟日志记录

标签 java logging slf4j lazy-evaluation slf4j-api

我在 Spring Boot 应用程序中将 SLF4J 与 Logback 结合使用。我对使用惰性日志记录很感兴趣,经过一些研究,我想出了这个解决方案。

这将按预期工作,并且如果日志记录级别不匹配,则不会调用方法。

logger.debug("Begin proceed aspect Method {} : initiator={} | recepient={} | tx_type={}",
                new Object() {@Override public String toString() { return proceedingJoinPoint.getSignature().getName(); }},
                new Object() {@Override public String toString() { return request.getAgentAlias(); }},
                new Object() {@Override public String toString() { return request.getSubscriberMobile(); }},
                new Object() {@Override public String toString() { return request.getTxType(); }});

如您所见,我正在创建新对象并一遍又一遍地重写 toString 方法。我不想这样做。有一个更好的方法吗?

我使用的是 SLF4J 1.7.28 版本,它与 Spring Boot 启动器捆绑在一起。 请注意,与其他日志框架相比,我更喜欢使用 SLF4J。

我尝试了 slf4j-api 2.0.0-alpha1 版本以及 slf4j-simple 绑定(bind),因为它具有 logger.atDebug.log() 实现。但我无法让它正常工作。

谢谢。

最佳答案

如果您想添加一些条件行,您可以添加 if 语句来检查日志级别是否启用,然后记录消息。

延迟加载被保留,但你会得到类似的东西:

if(log.isDebugEnabled()) {
 log.debug(....);
}

关于java - 使用 SLF4J 简化延迟日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61226307/

相关文章:

windows - 读取日志文件并获取列中的行而不是行

java - 升级到 java 11 后 SLF4J 日志记录不起作用

java - Log4j如何配置Log级别

java - 如何模拟或以其他方式测试 readPassword?

java - 如何在android studio中 Intent 点击按钮从activity到fragment

logging - 如何使用 IIS 7 自定义日志记录模块和 ETW 跟踪模块

java - slf4j log4j Hello World 问题

java - 使用 for 循环将 swing 组件放在另一个组件下面?

java - 将常规的 foreach 替换为流/lambda/方法引用

java - 在android中,有没有办法获取每条短信发送短信的应用程序的名称