2012-01-03 51 views
1

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

我在某处读过Syslog可以用于这个,但我不知道它如何使用。

回答

1

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

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.open($0)告诉syslog在插入记录时使用整个路径到您的应用程序。您可能需要使用Syslog.open(File.basename($0))$0缩小为应用程序名称。

相关问题