我有一个用Ruby编写的应用程序,它生成一个日志STDOUT
。该应用程序将在多个进程中运行,但我需要将从每个进程生成的日志整理到一个文件中。可能吗?如何整理来自不同进程的日志文件?
我在某处读过Syslog可以用于这个,但我不知道它如何使用。
我有一个用Ruby编写的应用程序,它生成一个日志STDOUT
。该应用程序将在多个进程中运行,但我需要将从每个进程生成的日志整理到一个文件中。可能吗?如何整理来自不同进程的日志文件?
我在某处读过Syslog可以用于这个,但我不知道它如何使用。
我终于决定使用log4r了。它可以整理来自不同进程的日志并将它们添加到同一个日志文件中。
你不说什么操作系统,你需要这个工作,但对于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.open($0)
告诉syslog在插入记录时使用整个路径到您的应用程序。您可能需要使用Syslog.open(File.basename($0))
将$0
缩小为应用程序名称。