Требуется решение для записи файлов HA Tomcat - PullRequest
0 голосов
/ 11 августа 2009

У нас есть простое веб-приложение, работающее на двух экземплярах Tomcat за Apache (установка Tomcat HA с использованием mod_proxy_balancer и mod_proxy_ajp). Роль веб-приложения заключается в записи данных входящего запроса в файл журнала.

Учитывая, что каждый экземпляр tomcat работает в своей собственной JVM, как нам реализовать запись в файл журнала?

Было бы замечательно, если бы оба экземпляра могли записывать в один и тот же файл, но казалось бы, что Log4J не поддерживает это. Мы открыты для написания нашего собственного средства записи файлов, но я не уверен, что java.nio.channels.FileLock будет делать то, что мы хотим.

Внизу находится Debian с файловой системой ext3, поэтому, если бы мы делали это на C или даже на PHP, мы бы использовали блокировки файловой системы. Однако Java была написана, чтобы абстрагироваться от базовой системы, и превратилась в беспорядок классов в нескольких пакетах, которые утверждают, что могут записывать файлы тем или иным способом. У кого-нибудь есть совет? Есть ли какие-нибудь пакеты, которые могли бы нам помочь?

Это просто глупая мечта - сначала написать один и тот же файл с 2 JVM? Конечно, я не первый.

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

Спасибо!

1 Ответ

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

Было бы гораздо более простым решением просто записать два (или более) файла журнала и затем просто объединить их после того, как вы их свернули.

Запись в один файл из двух или более процессов имеет всевозможные проблемы. Блокировка файла является довольно грубым и тяжелым решением.

Альтернативой может быть просто записать сообщения журнала в очередь (JMS), и один процесс может прочитать сообщения и записать в один файл журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...