Должен ли регистратор всегда быть окончательным и статическим?

К классу можно получить доступ из многих потоков. Должен быть логгер в этом случае тоже окончательный и статический? Спасибо.


person user710818    schedule 06.09.2011    source источник
comment
Пример кода может помочь прояснить вопрос.   -  person Peter    schedule 06.09.2011
comment
Также см. Этот пост для более подробного обсуждения этой передовой практики stackoverflow.com/questions/6653520/   -  person Daniel Holmes    schedule 06.09.2012
comment
вы можете вообще избавиться от этой переменной, если используете статическую оболочку jcabi-log вокруг slf4j   -  person yegor256    schedule 05.10.2012
comment
Описательный ответ можно найти здесь: http://stackoverflow.com/questions/6653520/why-do-we-declare-loggers-static-final   -  person Narasimhan    schedule 19.01.2017


Ответы (3)


Все основные пакеты журналирования Java (java.util.logging, log4j и т. Д.) Синхронизированы и потокобезопасны. Стандартный шаблон private final static регистратора для каждого класса подходит, даже если класс вызывается из нескольких потоков.

person ataylor    schedule 06.09.2011

Да, регистратор должен быть статическим и окончательным. Также желательно личное. Для каждого класса требуется только один экземпляр регистратора, а также, если вы не собираетесь динамически изменять предпочтения журнала, лучше сделать его окончательным.

Logger является потокобезопасным, и вам не нужно беспокоиться о потоковой передаче.

person uncaught_exceptions    schedule 06.09.2011

Если сделать регистратор окончательным и / или статическим, это никоим образом не повлияет на безопасность потоков при использовании регистратора. Если экземпляр регистратора используется из нескольких потоков, убедитесь, что вы используете поточно-безопасный регистратор.

В общем, регистратор должен быть закрытым статическим окончанием, но не предполагайте, что это делает его потокобезопасным. Наиболее распространенные фреймворки ведения журналов являются поточно-ориентированными, поэтому, если вы используете одну из них, все будет хорошо.

person John B    schedule 06.09.2011