Я всегда использовал следующий шаблон для создания (SLF4J) регистраторов:
private static final Logger log = LoggerFactory.getLogger(MyClass.class);
Это сработало до сих пор, но в какой-то момент меня интересовало контекст static
и необходимость проходить в конкретном литерале класса все время вместо того, чтобы просто использовать нестатический регистратор, например
private final Logger log = LoggerFactory.getLogger(getClass());
Об этом в основном спрашивали (и отвечали) перед этим для LOG4J
Должен ли журнал быть приватным статическим или нет
и здесь
Должен ли журнал всегда конечным и статическим?
Я понимаю, что final
в основном является обязательным, поэтому мне остается недоумевать, насколько высоки накладные расходы на использование SLF4J в нестационарном контексте.
В:
Есть ли существенные практические служебные данные при использовании
private final Logger log = LoggerFactory.getLogger(getClass());
над
private static final Logger log = LoggerFactory.getLogger(MyClass.class);
в среднем (веб-приложении)? (нет необходимости "обсуждать" высокопроизводительные веб-приложения с большой нагрузкой)
Примечание. В конечном итоге я планирую использовать еще более приятный подход, используя CDI для получения регистратора SLF4J, например
@Inject private final Logger log;
как описано здесь http://www.seamframework.org/Weld/PortableExtensionsPackage#H-TtLoggerttInjection, но мне нужно сначала узнать о кэшировании регистратора.
Суб-вопрос: можно ли даже использовать?:
@Inject private static final Logger log;
(только начиная с CDI, если честно)