Использование системного журнала в приложении rails - PullRequest
10 голосов
/ 18 сентября 2009

Я думаю об использовании syslog в моих приложениях rails. Процесс описан в этом сообщении в блоге :

  1. Добавьте gem 'SyslogLogger' к вашему Gemfile
  2. Добавьте require 'syslog_logger' к началу config/environments/production.rb
  3. Также раскомментируйте строку config.logger = в том же файле.

В производственной коробке у меня есть 4 рельса, работающие с использованием пассажира. Если я переключусь на использование syslogger для всех 4 моих приложений, то боюсь, что сообщения журнала от всех 4 приложений будут идти в один файл, и сообщения журнала будут чередоваться. Конечно, я могу использовать Splunk, но сначала я хотел проверить, можно ли мне получить один файл журнала для каждого из моих приложений rails. Это было бы желательно для моей ситуации.

Это возможно?

Ответы [ 2 ]

5 голосов
/ 07 апреля 2012

@ ответ цитирует один из вариантов различения приложений. Тем не менее, кадрирование сообщений системного журнала на самом деле имеет 2 поля, которые делают его еще проще: hostname и tag (более широко известный и используемый в качестве имени программы).

hostname устанавливается системным системным журналом, прежде чем он отправит сообщение на централизованный сервер. Он будет одинаковым для всех приложений в одной системе, но может быть удобен, когда вы проходите мимо одного сервера.

Более интересным является tag. Ваше приложение определяет tag, когда оно создает SyslogLogger. Например:

SyslogLogger.new('app1')

Класс logger отправляет системный системный журнал как app1, и он появляется как в локальном файле журнала, так и во всех удаленных местах назначения системного журнала (без необходимости изменять само сообщение журнала). По умолчанию rails. Все современные демоны системного журнала могут фильтроваться на основе tag; см. program() для syslog-ng и $programname для rsyslog.

Кроме того, стоит отметить, что SyslogLogger в основном включает в себя функции C openlog() и syslog(), так что в основном вся последующая конфигурация выполняется в системном демоне. Обычно это желательно, но иногда вы можете захотеть, чтобы ваше приложение Rails регистрировалось непосредственно в определенном месте назначения (например, для упрощения автоматического развертывания, изменения атрибутов, не разрешенных syslog(), или запуска в средах без доступа к системному демону).

Мы столкнулись с парой таких случаев и сделали замену Logger, которая сама генерирует пакеты UDP. remote_syslog_logger драгоценный камень на GitHub .

2 голосов
/ 19 сентября 2009

Да, по умолчанию почти все Unix syslogds будут писать сообщения, заданные в user или local*, в одном файле. Тем не менее, каждый syslogd, который я знаю, позволит вам указывать файлы журналов для каждого объекта, поэтому ваш первый журнал приложений может иметь значение local1.*, второй - local2.* и т. Д.

Более того, более новые демоны системного журнала, такие как syslog-ng, позволяют разбивать сообщения на разные файлы, сравнивая сообщения с регулярным выражением (записывать строки журнала, в которых есть railsapp_1, в /var/log/railsapp_1.log и т. Д.).

Итак, настройте syslogd соответствующим образом, и все готово (подробные сведения об изменении этой конфигурации следует запросить на serverfault.com , если справочные страницы вашей системы не помогают вам это сделать).

...