2011-12-28 3 views
3

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

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

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

+0

, который больше напоминает ошибку конфигурации, а не проблему с потоками. –

+0

Ну, как это может быть, что два проекта с разными конфигурационными файлами могут влиять друг на друга, если каждая конфигурация вообще не имеет ссылок на другой журнал проектов –

ответ

5

Да, log4j потокобезопасен:

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

Ref.

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

3

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