Перенести операторы log4J log.debug в параметризованные сообщения SLF4J? - PullRequest
2 голосов
/ 16 июля 2011

У меня есть около 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 Ответ

3 голосов
/ 18 июля 2011

Я сомневаюсь, что у вас будут какие-либо улучшения производительности при использовании SLF4J / LOG4J, так как org.slf4j.impl.Log4jLoggerAdapter будет использовать почти такой же код, как вы уже (с двойной оценкой, будет ли регистраторвключен или нет).Сначала он проверяет, включено ли ведение журнала отладки, а затем отправляет отформатированное сообщение в org.apache.log4j.Category , который снова проверяет, должно ли сообщение быть зарегистрировано на настроенном уровне.

Тем не менее, имеет смысл перейти на параметризованное ведение журнала, так как оно намного более читаемо и короче.К сожалению, я не знаю ни одного автоматического способа рефакторинга кода.

EDIT : только что заметил, что существует SLF4J Migrator , который, кажется, помогает выполнять некоторые основные миграции (импорт строк и логгеров).Это может помочь начать миграцию, даже если операторы регистрации не будут затронуты и должны быть реорганизованы вручную.

...