Я использую Log4J в своем приложении для ведения журнала. Раньше я использовал отладочный вызов вроде:
Вариант 1:
logger.debug("some debug text");
но некоторые ссылки показывают, что лучше сначала проверить isDebugEnabled()
, например:
Вариант 2:
boolean debugEnabled = logger.isDebugEnabled();
if (debugEnabled) {
logger.debug("some debug text");
}
Итак, мой вопрос: " Отличается ли вариант 2 от производительности?".
Поскольку в любом случае система Log4J имеет такую же проверку для debugEnabled. Для варианта 2 может быть полезно, если мы используем несколько операторов отладки в одном методе или классе, где фреймворку не нужно вызывать метод isDebugEnabled()
несколько раз (по каждому вызову); в этом случае он вызывает метод isDebugEnabled()
только один раз, и если Log4J настроен на уровень отладки, то на самом деле он дважды вызывает метод isDebugEnabled()
:
- В случае назначения значения переменной debugEnabled и
- Фактически вызывается методом logger.debug().
Я не думаю, что если мы напишем несколько операторов logger.debug()
в методе или классе и вызывая метод debug()
в соответствии с параметром 1, то это будет накладные расходы для платформы Log4J по сравнению с вариантом 2. Поскольку isDebugEnabled()
является очень маленький метод (с точки зрения кода), он может быть хорошим кандидатом для вложения.