我想在我的rails应用程序中使用syslog.此博客文章概述了该过程:
加入gem 'SyslogLogger'
你的Gemfile
添加require 'syslog_logger'
到顶部config/environments/production.rb
同时取消注释config.logger =
同一文件中的行.
在生产箱中,我有4个使用乘客运行的轨道应用程序.如果我为所有4个应用程序切换到使用syslogger,那么我担心来自所有4个应用程序的日志消息将转到单个文件,并且日志消息将交错.当然,我可以使用splunk,但首先我想检查是否有可能为我的每个rails应用程序获取一个日志文件.这对我的情况来说是可取的.
那可能吗?
@ cite的答案涵盖了区分应用程序的一个选项.但是,系统日志消息框架实际上有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上.