Я постараюсь поставить свои два цента с другой точки зрения
В чем именно выгода параметризованной регистрации?
Вы просто откладываете toString()
вызов и конкатенацию строк до тех пор, пока действительно не потребуется, то есть когда вам действительно нужно зарегистрировать сообщение. Это оптимизирует производительность, когда эта конкретная операция регистрации отключена. Проверьте исходный код для SLF4J , если не уверены.
Делает ли параметризованная регистрация бесполезной охрану во всех случаях?
Нет.
В каких случаях будут полезны охранники?
Когда есть другие потенциально дорогие операции.
Например (в случае, если эта конкретная операция регистрации отключена), если у нас нет защиты журнала
logger.debug("User name: {}", getUserService().getCurrentUser());
- Мы бы заплатили стоимость от
obj = getUserService().getCurrentUser()
- Мы сохраним стоимость от
"User name: " + obj.toString()
Если мы используем охрану регистрации :
if (logger.isDebugEnabled()) {
logger.debug("User: {}", getUserService().getCurrentUser());
}
- Мы бы заплатили стоимость
logger.isDebugEnabled()
- Мы сэкономим стоимость от
obj = getUserService().getCurrentUser()
- Мы сохранили бы стоимость от
"User name: " + obj.toString()
В последнем случае мы сэкономили бы обе затраты по цене проверки isDebugEnabled()
дважды, когда эта конкретная операция регистрации включена.
ПРИМЕЧАНИЕ: это всего лишь пример, не пытающийся обсуждать здесь хорошие / плохие методы.