Могут ли два log4j fileappenders записывать в один и тот же файл? - PullRequest
4 голосов
/ 10 августа 2009

Забудьте на секунду вопрос о том, зачем вам это делать - если по какой-то причине два FileAppender настроены на один и тот же файл - сработает ли эта настройка?

Ответы [ 3 ]

4 голосов
/ 11 августа 2009

LogAj FileAppender не допускает запись двух JVM в один и тот же файл. Если вы попытаетесь, вы получите поврежденный файл журнала. Однако logback, преемник log4j, в разумном режиме позволяет двум приложениям даже в разных JVM записывать в один и тот же файл.

0 голосов
/ 12 сентября 2014

С Log4j FAQ a3.3

Как получить несколько процессов для входа в один файл?

У вас может быть журнал каждого процесса в SocketAppender. Принимающий SocketServer (или SimpleSocketServer) может получать все события и отправлять их в один файл журнала.

Что касается того, что это на самом деле означает, я буду исследовать себя.

Я также нашел следующий обходной путь для другого SO вопроса :

Код + Пример

0 голосов
/ 10 августа 2009

Он не дает прямого ответа на ваш вопрос, но FileAppender log4 * net * имеет атрибут LockingModel, который вы можете установить на блокировку только тогда, когда файл фактически используется. Таким образом, если бы у вас было два FileAppender, работающих в одном потоке с установленным MinimalLock, это, вероятно, работало бы отлично. В разных потоках время от времени вы можете попасть в тупик.

FileAppender поддерживает подключаемые модели блокировки файлов через свойство LockingModel. Поведение по умолчанию, реализованное FileAppender.ExclusiveLock, заключается в получении эксклюзивной блокировки записи в файл до тех пор, пока этот appender не будет закрыт. Альтернативная модель, FileAppender.MinimalLock, удерживает блокировку записи только тогда, когда appender записывает событие регистрации.

Быстрый поиск в сети не дал никаких полезных результатов по реализации MinimalLock в log4j.

...