我在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 绑定,因为它具有logger.atDebug.log()实现。但是我无法使其正常工作。
谢谢。
答案 0 :(得分:0)
如果要添加一些条件行,则可以添加if语句以检查是否启用了日志级别,然后记录消息。
保留了延迟加载,但您将得到类似的内容:
if(log.isDebugEnabled()) {
log.debug(....);
}
答案 1 :(得分:0)
更好的方法:
if (logger.isDebugEnabled()) {
logger.debug("Begin proceed aspect Method {} : initiator={} | recepient={} | tx_type={}",
proceedingJoinPoint.getSignature().getName(),
request.getAgentAlias(),
request.getSubscriberMobile(),
request.getTxType());
}
或者:
if (logger.isDebugEnabled()) {
logger.debug("Begin proceed aspect Method " + proceedingJoinPoint.getSignature().getName() +
" : initiator=" + request.getAgentAlias() +
" | recepient=" + request.getSubscriberMobile() +
" | tx_type=" + request.getTxType());
}