Централизованное ведение журнала для многих приложений Java: Syslog vs JMS vs Http vs Local file
Я хочу, чтобы весь мой журнал приложений был централизован (в идеале, в режиме реального времени). Мы будем использовать Log4 Appender. Какой я должен использовать:
- Отправить событие журнала в очереди JMS
- Syslog/syslog-ng
- Напишите местному файлу и используйте rsync (каждые 3 секунды) для репликации журнала
- Сделайте POST для централизованной службы Http Http
Какой из них вы используете?
Ответы
Ответ 1
В зависимости от ваших требований. Вход в очередь (как в JMS) дает вам максимальную гибкость ваших параметров, так как ваша операция журнала может вернуться, как только сообщение журнала будет записано в очередь. Затем вы можете иметь другой процесс, чтобы удалить эти сообщения журналов из очереди и записать их в предпочитаемое хранилище журналов (база данных, файловая система и т.д.).
Небольшой недостаток ваших сообщений в логах немного отстает от системы, которая регистрируется, но это почти всегда так, даже при записи на основе файлов.
Ответ 2
Это может быть излишним, но вы посмотрели на Splunk? Для приложений Java я использовал Log4J или SLF4J для входа в файлы, затем Splunk может агрегировать журналы и сделать их доступными для поиска.
Ответ 3
Я не знаком с Log4 (Log4j?), но имеет ли он приложение для базы данных? Это обеспечит централизацию, в которой вы нуждаетесь, и устранит необходимость репликации ваших журналов.
Ответ 4
Это действительно очень зависит от того, что вы хотите. Я не думаю, что syslog - хороший выбор для ведения журнала приложений, но он больше подходит для журналов инфраструктуры. Не зная слишком много деталей, все 4 варианта, которые вы указали, выглядят в порядке. Мы используем this.
Ответ 5
btw, log4j имеет AsyncAppender, который использует очередь и выделенный потребительский поток для ведения журнала из него