Назад | Перейти на главную страницу

Как я могу перенаправить вывод файла журнала в сетевой сокет?

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

Log4j не имеет прямого способа передать вывод в syslog. два метода, с которыми я столкнулся, включают взлом сценария "catalina.sh" (что бы это ни влечет; еще не смотрел), а другой - компиляция специального Java-класса для взаимодействия с log4j.

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

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

Возможно, вы сможете что-то взломать вместе с помощью netcat или тому подобного, но использование специального инструмента, такого как logstash, в долгосрочной перспективе будет намного лучше.

Помимо простого использования в качестве транспорта журнала, logstash также может изменять записи журнала для добавления дополнительных данных (имя хоста и т. Д.), Если это необходимо.

Лучше всего настроить локальный сервер системного журнала для чтения файлов и отправки их в удаленное место. Для этого я широко использовал syslog-ng, rsyslog и nxlog. Беглый взгляд на Google показывает, что syslogd может делать то же самое.