Является ли log4j поточно-ориентированным? - PullRequest
4 голосов
/ 28 декабря 2011

У меня следующий вопрос. Мы используем log4j в двух наших проектах, которые размещены на одном сервере GlassFish. Каждый проект имеет внутри файл log4j.properties, который указывает на файлы, основанные на разных каталогах (назовем их Project1 и Project2 ).

Теперь по некоторым неясным причинам иногда информационные сообщения первого проекта записываются в Project2 файлов журналов, и обратное также верно. Я проверил файлы log4j.properties для обоих проектов, в них нет ничего, указывающего на журнал другого проекта.

Подозрение заключается в том, что log4j на самом деле не является поточно-ориентированным, поэтому, если два пользователя работают в двух системах одновременно, сообщения регистраторов могут быть смешанными. Это подозрение верно?

Ответы [ 2 ]

7 голосов
/ 28 декабря 2011

Да, log4j является потокобезопасным:

Да, log4j является поточно-ориентированным. Компоненты Log4j предназначены для использования в многопоточные системы.

Ref .

То, что вы описываете, звучит скорее как ошибка конфигурации, а не как проблема кросс-процесса / потоков.

4 голосов
/ 21 февраля 2013

Да, log4j является потокобезопасным.Причина в том, что метод AppenderSkeleton.doAppend () синхронизирован. Но будьте осторожны при программной настройке! Например, вы не можете использовать один и тот же экземпляр TTCCLayout в разных приложениях (читайте javadoc)!Посмотрите на PatternLayout формат метода ().Он изменяет поле экземпляра (StringBuffer sbuf), поэтому, если вы используете один и тот же экземпляр PatternLayout в разных приложениях, вы столкнетесь с условиями гонки. EnhancedPatternLayout лучше, потому что они изменили метод форматирования.

...