2010-11-16 88 views
4

我想知道是否有真正統一的日誌系統可以支持Rails 延遲工作,並且相對容易設置。Ruby是否有統一的日誌記錄系統?

我希望能夠登錄到我的應用程序(Rails,延遲工作等)中的任何執行上下文相同的服務器/文件,即使我目前不在Rails上下文中。

愛上Rails記錄器,但在Resque作業中無法登錄。有任何想法嗎?

回答

6

你的意思是一個文件記錄器,類似於syslog?

Ruby的得到了LoggerSyslog

Logger可以執行日誌滾動,處理嚴重性級別,並在很多Ruby模塊中用於日誌記錄。您可以定義要登錄的文件的名稱,或使用STDOUT/STDERR或IO流。

syslog的文檔相當準確,但您可以通過瀏覽其源代碼或閱讀Ruby Syslog README來獲取信息。

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 

這樣我就可以登錄東西在不同的過程中發生的事情,也由富實例的OBJECT_ID過濾日誌,因此只有相關的數據被記錄。