我有一个用Ruby编写的应用程序,它生成一个STDOUT
的日志。应用程序将在多个进程中运行,但我需要将从每个进程生成的日志整理到一个文件中。可能吗?
我在某处读过Syslog可以用于此但我不确定它是如何使用的。
答案 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在插入记录时使用应用程序的完整路径。您可能希望使用$0
将Syslog.open(File.basename($0))
缩小为仅应用程序名称。
答案 1 :(得分:1)
我最终决定使用log4r。它可以整理来自不同进程的日志,并将它们添加到同一个日志文件中。