如何整理来自不同进程的日志文件?

时间:2012-01-03 13:39:12

标签: ruby logging syslog

我有一个用Ruby编写的应用程序,它生成一个STDOUT的日志。应用程序将在多个进程中运行,但我需要将从每个进程生成的日志整理到一个文件中。可能吗?

我在某处读过Syslog可以用于此但我不确定它是如何使用的。

2 个答案:

答案 0 :(得分:1)

您没有说明需要使用哪种操作系统,但对于Linux和Mac OS,Ruby的syslog是一个很好的候选者。我不知道它是否在Windows上实现,但我认为不是。

内置文档不是很好,但是如果你看一下源代码或“Ruby Syslog README”,你就会明白如何使用它。

过去我使用了以下代码。出于您的目的,您需要将STDOUT的输出重新路由到此syslog方法。

require 'syslog'

def syslog(msg, level=:info)

  # if msg is an array, we assume it is a cmd, message pair.
  if (msg.is_a?(Array))
    msg = msg.join(' => ')
  end

  # escape all '%' using '%%'
  msg.gsub!('%', '%%')

  Syslog.open($0) { |s|
    case level
    when :crit, :critical
      s.notice(msg)
    when :emerg, :emergency
      s.emerg(msg)
    when :alert
      s.alert(msg)
    when :err, :error
      s.err(msg)
    when :warn, :warning
      s.warning(msg)
    when :notice
      s.notice(msg)
    when :info, :information
      s.info(msg)
    when :debug, :debugging
      s.debug(msg)
    end
  }
end

检查syslog手册页以获取有关各种日志记录级别的信息。

Syslog.open($0)告诉syslog在插入记录时使用应用程序的完整路径。您可能希望使用$0Syslog.open(File.basename($0))缩小为仅应用程序名称。

答案 1 :(得分:1)

我最终决定使用log4r。它可以整理来自不同进程的日志,并将它们添加到同一个日志文件中。