Прежде чем продолжить, краткий отказ от ответственности: пока у меня нет опыта работы с Spring MVC, однако я использовал log4j с базовыми сервлетами Java, и я считаю, что применяются те же принципы.
На основе предоставленного вами кодаВы можете сделать две вещи, чтобы улучшить скорость регистрации:
- Объявить
logger
как статическое:
protected static final Log logger = LogFactory.getLog(MyController.class);
Если несколько экземпляровваш объект создан, это гарантирует, что вы не создаете новый регистратор каждый раз (поскольку создание или получение регистратора - дорогостоящая операция).
- Защитите оператор if, чтобы проверить, является ли указанный уровеньведение журнала включено, согласно ответу Тило.Вы не только избежите затрат на метод
toString()
(как он правильно указал), но и избежите ненужной конкатенации строк.
Если вы будете следовать этим рекомендациям, стоимость регистрации при регистрации будетотключенным будет начальная стоимость установки log4j + инициализация регистратора для каждого класса с использованием регистраторов + один оператор if для оценки (и если я правильно помню, в log4j это сводится к накладным расходам вызова функции плюс одно целое числосравнение).
Когда ведение журнала включено, вы должны учитывать любые затраты, внесенные выбранным вами приложением (например, регистрация в базе данных повлечет за собой некоторые накладные расходы), а также время, необходимое для форматированияинформация журнала.Например, при использовании PatternLayout использование шаблонов %F
, %M
или %L
является дорогостоящей операцией, поскольку log4j генерирует эту информацию путем построения полной трассировки стека.
Источник: log4j введение и log4j исходный код.