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