2008-10-14 33 views

回答

9

跛腳的一種回答我的問題,但我發現答案,這和增加供以後搜索。

由於某種原因,我需要明確要求log4r/outputter/syslogoutputter其他方式SyslogOutputter會導致「未初始化的常量SyslogOutputter(NameError)」錯誤。其他輸出者似乎沒有這個問題。

require 'rubygems' 
require 'log4r' 
require 'log4r/outputter/syslogoutputter' 
mylog = Logger.new 'mylog' 
mylog.outputters = SyslogOutputter.new("f1", :ident => "myscript") 
mylog.info "Starting up." 

拉吉

+4

如果你找到答案,回答你自己的問題絕對不是跛腳。 – silvamerica 2011-04-25 18:37:33

1

我發現這非常有幫助,但我不得不做出進一步修改。某些東西試圖重新打開系統日誌,導致未處理的RuntimeError。我用這把斧頭瘋狂覆蓋固定它的環境/ production.rb:

require 'rubygems' 
require 'log4r' 
require 'log4r/outputter/syslogoutputter' 

# The outputter needs some love to avoid attempts to reopen syslog. Most of this is cargo-culted from source. 
class Log4r::SyslogOutputter 
    def initialize(_name, hash={}) 
    super(_name, hash) 
    ident = (hash[:ident] or hash['ident'] or _name) 
    logopt = (hash[:logopt] or hash['logopt'] or LOG_PID | LOG_CONS).to_i 
    facility = (hash[:facility] or hash['facility'] or LOG_USER).to_i 
    if Syslog.opened? then 
     @syslog = Syslog 
    else 
     @syslog = Syslog.open(ident, logopt, facility) 
    end 
    end 
end 

RAILS_DEFAULT_LOGGER = Log4r::Logger.new 'mylog' 
config.logger = RAILS_DEFAULT_LOGGER 
config.logger.outputters = Log4r::SyslogOutputter.new("f1", :ident=>"RoR") 
config.logger.info "Starting up." 

有可能做的更漂亮的方式,但是這似乎爲我做的。