Я управляю проектом с открытым исходным кодом в Java и в моем коде около 20 мест, где я регистрирую исключения, используя следующий шаблон (slf4j версия 1.7.30)
private static final Logger logger = LoggerFactory.getLogger();
...
try {
interfaces = NetworkInterface.getNetworkInterfaces();
} catch (SocketException ex) {
logger.error("Socket exception when retrieving interfaces: {}", ex);
}
или аналогично
try {
// stuff
} catch (IOException ioe) {
logger.error("Server error: {}", ioe);
}
Начиная с сегодняшнего дня, автоматический анализ качества кода SonarCloud начал помечать их с помощью правила java:S2275
(строки формата в стиле Printf не должны приводить к неожиданному поведению во время выполнения ) с указанным c сообщением «Недостаточно аргументов».
РЕДАКТИРОВАТЬ: Следует отметить, что это, как представляется, последовательно происходит, когда Exception
является последним аргументом. Следующий шаблон не flag:
try {
// Server connection code
} catch (IOException e) {
logger.error("Server Connection error: {}", e.getMessage());
}
Обзор этого другого вопроса StackOverflow указывает, что, возможно, дополнительный аргумент для исключения является необязательным и приведет к другое поведение, поэтому мне не ясно, как это применимо здесь и почему оно внезапно изменится.
Есть ли что-то, что я могу / должен сделать, чтобы лучше перевести эти исключения в сообщения журнала (например, используйте getMessage()
на всех них вместо того, чтобы полагаться на автоматический toString()
разбор), или это ложный положительный результат?
(список Сонара моих 20 проблем , связанный здесь .)