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