Перенести операторы log4J log.debug в параметризованные сообщения SLF4J?
У меня есть около 400 файлов с исходным кодом Java, содержащих от ста до двадцати тысяч строк кода для перехода от конкатенации Log4J String к параметризованному протоколированию SLF4J.
if(log.isDebugEnabled(){
log.debug("Came here with value: " + car.getName());
}
Я хотел бы воспользоваться параметризованным логированием SLF4J
log.debug("Пришел сюда со значением: {}", car.getName());
Я думал о написании сценария для автоматизации этого процесса, или на самом деле есть способ сделать это?
Основная причина, по которой я хотел бы перейти на параметризованное ведение журнала SLF4J, связана с производительностью.
Будет использовать SLF4J + Log4J из-за LogBack + SLF4J требует JavaSE 5 и выше, в то время как мне нужно работать в среде JVSE 1.4 JVM.
1 ответ
Я сомневаюсь, что у вас будут какие-либо улучшения производительности при использовании SLF4J/LOG4J, так как org.slf4j.impl.Log4jLoggerAdapter будет использовать почти тот же код, что и вы (с двойной оценкой, включен ли регистратор или нет). Сначала он проверяет, включено ли ведение журнала отладки, а затем отправляет отформатированное сообщение в org.apache.log4j.Category, которая снова проверяет, должно ли сообщение быть зарегистрировано на настроенном уровне.
Тем не менее, имеет смысл перейти на параметризованное ведение журнала, так как оно гораздо более читаемо и короче. К сожалению, я не знаю ни о каком способе рефакторинга кода.
РЕДАКТИРОВАТЬ: Только что заметил, что существует SLF4J Migrator, который, кажется, помогает выполнять некоторые основные миграции (строки импорта и объявления регистратора). Это может помочь начать миграцию - даже если операторы журналирования не будут затронуты и должны быть реорганизованы вручную.