Я использую последний плагин Eclipse и Sonar
В answer для регистрации есть следующая строка:
log.debug("Request body: {}", new String(body, "UTF-8"));
, которая должна создавать String, только если в DEBUGуровень:
/**
* Log a message at the DEBUG level according to the specified format
* and argument.
* <p/>
* <p>This form avoids superfluous object creation when the logger
* is disabled for the DEBUG level. </p>
*
* @param format the format string
* @param arg the argument
*/
public void debug(String format, Object arg);
Но Sonar помечает его как squid:S2629
:
«Предварительные условия» и аргументы регистрации не должны требовать оценки (squid: S2629)
И привести примеры с конкатенацией
logger.log (Level.DEBUG, "Что-то пошло не так:" + сообщение);// Несоответствующий;Конкатенация строк выполняется, даже если уровень журнала слишком высок для отображения сообщений DEBUG
Это ложное срабатывание предупреждения гидролокатора или я что-то упустил?
Это не дубликат этот вопрос , который, как правило, задает концепцию правила, то есть объединение, но не форматирование с созданием объекта, как new String
Также ссылка ответа говорит о создании new Date()
не создает проблему со встроенным форматом:
public static void main(String[] args) {
LOGGER.info("The program started at {}", new Date());
}
}
Ведение журнала таким образом позволяет избежать снижения производительности при конкатенации строк, когда на самом деле ничего не нужно регистрировать.