如何解决这个问题“标准输出不应直接用于记录任何内容”

问题描述 投票:0回答:3

我需要一份打印声明。但声纳不允许这种类型。

String txt="Something";
System.out.println("Print: "+txt);

预期输出:

Print: Something

我尝试了这种格式 logger.log()。它不符合我们的要求。

java sonarqube
3个回答
0
投票
如果您使用

System.out

,或者您传递给日志记录函数的参数中有字符串连接或其他计算,则
Sonarqube 不喜欢它。在记录之前在单独的行上构造完整的消息:

String txt = "Print: " + "Something";

String logMessage = "Print: " + txt;
logger.log(Level.INFO, logMessage);

0
投票

如果记录器不满足您的要求,请通过配置来满足您的要求。

有一些广泛使用的日志框架是高度可配置的,我怀疑它们无法完成您使用简单的操作

System.out.println

例如,查看非常流行的

SLF4J
Logback
作为日志记录提供商。

http://www.slf4j.org/

http://logback.qos.ch/


0
投票

接受的答案是一种解决方法,它隐藏了声纳的问题,但没有解决它。

警告的目的是避免即使日志记录级别足够高以至于不会打印消息也需要运行的代码。有了这个:

log.debug(string1 + string2);

即使你完全丢弃结果,你也会计算一个新的字符串。

我不知道你使用什么日志框架,但我希望它有一个 format-string 和 0 个或多个对象在其签名中,所以你可以这样写:

log.debug("{} {}", string1, string2);

现在,如果配置不打印调试消息,则不会计算额外的字符串。

© www.soinside.com 2019 - 2024. All rights reserved.