Существуют ли потери производительности при использовании slf4j с log4j по сравнению с использованием только log4j? - PullRequest
3 голосов
/ 17 августа 2011

Я думаю о переносе проекта java 1.4.2 из log4j в slf4j.Это преимущество параметризованной регистрации и ясности кода (нет необходимости, если log.isdebug ..), что привлекает меня к таким соображениям.

Существуют ли потери производительности при преобразовании в slf4j?

В прошлый раз, когда я проверял, могу ли я использовать logback, у него есть требование к jdk, которое требует, чтобы оно было как минимум 1.5, поэтому яЯ рассматриваю slf4j и log4j.

1 Ответ

9 голосов
/ 17 августа 2011

Нет, вы должны получить преимущество в производительности от slf4j, если что-нибудь, потому что (если вы используете параметризованные сообщения), тогда slf4j откладывает превращение своих параметров в строки, пока не проверит, что сообщение не будет отфильтровано по журналу.уровень :

Существует очень удобная альтернатива, основанная на форматах сообщений.Предполагая, что запись является объектом, вы можете написать:

Object entry = new SomeObject();
logger.debug("The entry is {}.", entry);

После оценки, регистрировать или нет, и только если решение положительное, реализация регистратора отформатирует сообщение и заменитпара '{}' со строковым значением entry.Другими словами, эта форма не несет затрат на создание параметров в случае, если оператор журнала отключен.

Следующие две строки приведут к одинаковому результату.Однако вторая форма будет превосходить первую форму по крайней мере в 30 раз, в случае отключенного оператора ведения журнала.

logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);
...