Ruby有一个统一的日志系统吗?

时间:2010-11-16 04:45:02

标签: ruby-on-rails ruby logging resque

我想知道是否有任何可以支持Rails 延迟作业的真正统一的日志系统,并且相对容易设置。

我希望能够为我的应用程序中的任何执行上下文(Rails,延迟作业等)登录到同一服务器/文件,即使我目前不在Rails上下文中。

喜欢Rails记录器,但在Resque作业中我无法登录。有任何想法吗?

2 个答案:

答案 0 :(得分:6)

你的意思是文件记录器,类似于syslog?

Ruby同时拥有LoggerSyslog

Logger可以进行日志滚动,处理严重性级别,并在许多Ruby模块中用于日志记录。您可以定义要记录的文件的名称,或使用STDOUT / STDERR或IO流。

系统日志的文档非常准确,但您可以通过浏览其源代码或阅读Ruby Syslog README来获取信息。

答案 1 :(得分:2)

我必须记录由resque作业运行的gem中发生的事情。要记录Rails数据库的内容,我执行以下操作:

#in gem:
class Foo
  def self.logger
    @@logger ||= Logger.new(nil)
  end

  def self.logger=(logger)
    @@logger = logger
  end

  def self.logger_reset
    self.logger = Logger.new(nil)
  end

  def self.logger_write(obj_id, message, method = :info)
    self.logger.send(method, "|%s|%s|" % [obj_id, message])
  end
end

#in rails in initializers
Foo.logger = MyRailsLogger.new

#in in rails in lib or in model if it uses ActiveRecord
class MyRailsLogger
  def info
    ...
  end

  ...
end

通过这种方式,我可以记录在不同进程中发生的事情,并通过Foo实例的object_id过滤日志,因此只记录相关数据。