11

我正在考虑在我的 Rails 应用程序中使用 syslog。此博客文章概述了该过程:

  1. 添加gem 'SyslogLogger'到您的Gemfile
  2. 添加require 'syslog_logger'到顶部config/environments/production.rb
  3. 还要取消注释config.logger =同一文件中的行。

在生产框中,我有 4 个使用乘客运行的轨道应用程序。如果我切换到对所有 4 个应用程序使用 syslogger,那么我担心来自所有 4 个应用程序的日志消息将转到一个文件,并且日志消息将交错。当然,我可以使用 splunk,但首先我想检查是否可以为我的每个 rails 应用程序获取一个日志文件。这对我的情况来说是可取的。

那可能吗?

4

2 回答 2

5

@cite 的回答涵盖了区分应用程序的一种选择。但是,syslog 消息框架实际上有 2 个字段,使其更容易:hostnametag(更常见的并用作程序名称)。

hostname由系统 syslog 守护程序在将消息转发到中央服务器之前设置。这对于同一系统上的所有应用程序都是相同的,但当您超过 1 个服务器时可能会很方便。

更有趣的是tag。您的应用定义了tag它何时实例化SyslogLogger. 例如:

SyslogLogger.new('app1')

记录器类将发送到系统 syslogd 作为app1,并且出现在本地日志文件和任何远程 syslog 目标中(无需修改日志消息本身)。默认值为rails. 所有现代 syslog 守护进程都可以基于tag; 参见program()syslog-ng 和$programnamersyslog。

另外,值得注意的是,它SyslogLogger基本上是包装了 Copenlog()syslog()函数,所以基本上所有日志后配置都发生在系统守护进程上。通常这是可取的,但有时您可能希望您的 Rails 应用程序直接登录到特定目标(例如简化自动部署、更改不允许的属性syslog()或在无法访问系统守护程序的环境中运行)。

我们遇到了几个这样的情况,并做了一个Logger替换,它自己生成 UDP 数据包。remote_syslog_loggergem在GitHub 上

于 2012-04-06T23:43:31.413 回答
2

是的,默认情况下,几乎所有 Unix都会将or工具中syslogds给出的消息写入同一文件中。但是,我所知道的每个人都将允许您在每个设施的基础上指定日志文件,因此您可以将您的第一个应用程序记录到,第二个到等等。userlocal*syslogdlocal1.*local2.*

此外,较新的 syslog 守护进程syslog-ng允许通过针对正则表达式评估消息来将消息拆分到不同的文件(将其中包含railsapp_1的日志字符串写入/var/log/railsapp_1.log日志字符串写入等等)。

所以,适当地配置你就完成了(如果你的系统的手册页不能帮助你做到这一点syslogd,应该在serverfault.com上询问更改该配置的详细信息。)

于 2009-09-19T11:45:33.943 回答