Централизованное ведение журнала для многих приложений 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, который использует очередь и выделенный потребительский поток для ведения журнала из него