



Лучше всего разрешить каждому приложению регистрироваться отдельно, а затем назначить запланированное задание для «скрепления» файлов вместе в зависимости от времени. Если вам нужен действительно актуальный доступ к полному журналу, вы можете запускать его каждый час.
Log4j достаточно гибок, поэтому вы можете создавать записи журнала в формате, совместимом с записями, уже находящимися в файле. Просто посмотрите в приложениях, как отформатировать определенные поля данных.
Ваша основная проблема будет связана с блокировкой, скорее всего, другими приложениями. Убедитесь, что все приложения не имеют монопольной блокировки файла, и все будет в порядке.
В Log4j есть SocketAppender, который отправляет события в службу, которую вы можете реализовать самостоятельно или использовать простую реализацию в комплекте с Log4j.
Он также поддерживает syslogd и журнал событий Windows, которые могут быть полезны при попытке унифицировать вывод журнала с событиями из приложений, отличных от Java.
Если производительность вообще является проблемой, вы хотите, чтобы одна служба записывала файл журнала, а не пыталась координировать согласованную стратегию блокировки между различными приложениями ведения журнала.
У меня есть опыт использования следующих двух подходов:
Если вы не планируете использовать JBoss, вы можете использовать второй подход как основу вашего собственного решения для ведения журналов.
Я не думаю, что приложения log4j по умолчанию выполняют какую-либо блокировку или синхронизацию файлов. Без такой блокировки вы, вероятно, потеряете сообщения журнала или получите их искаженными.
Я не уверен, насколько легко выполнить блокировку файлов в Java, но, чтобы заставить эту работу работать напрямую, я думаю, вам нужно будет создать подкласс соответствующего Appender и переопределить метод ведения журнала, обернув его кодом синхронизации, который блокирует и разблокирует файл. . Это может повлиять на производительность в зависимости от загрузки вашей системы.
Log4perl имеет синхронизирующий Appender, Log :: Log4perl :: Appender :: Synchronized, который обертывает Appender и выполняет это, а также, кажется, предоставляет флаг в своем Log :: Log4perl :: Appender :: File, который предотвращает чередование строк. Вы можете посмотреть, что они делают, чтобы увидеть, можно ли это воспроизвести на Java.