Ответ @cite охватывает один вариант различения приложений. Однако кадр сообщения системного журнала на самом деле имеет 2 поля, которые делают его еще проще: hostname
и tag
(более известные и используемые как имя программы).
hostname
устанавливается демоном системного журнала до того, как он перенаправит сообщение на централизованный сервер. Это будет одинаково для всех приложений в одной системе, но может быть удобно, когда вы выходите за пределы 1 сервера.
Более интересным является tag
. Ваше приложение определяет tag
при создании экземпляра SyslogLogger
. Например:
SyslogLogger.new('app1')
Класс регистратора будет отправлять в системный syslogd как app1
, и это отображается как в локальном файле журнала, так и в любых удаленных местах назначения системного журнала (без необходимости изменять само сообщение журнала). По умолчанию rails
. Все современные демоны системного журнала могут фильтровать на основе tag
; см. program()
для syslog-ng и $programname
для rsyslog.
Кроме того, стоит отметить, что SyslogLogger
в основном является оберткой для функций C openlog()
и syslog()
, поэтому в основном вся конфигурация после регистрации происходит в системном демоне. Как правило, это желательно, но иногда вы можете захотеть, чтобы ваше приложение Rails регистрировалось непосредственно в определенном месте назначения (например, для упрощения автоматического развертывания, изменения атрибутов, не разрешенных syslog()
, или запуска в средах без доступа к системному демону).
Мы столкнулись с парой таких случаев и сделали вставную замену Logger
, которая сама генерирует UDP-пакеты. Драгоценный камень remote_syslog_logger
находится на GitHub.
person
Troy Davis
schedule
06.04.2012