2008-10-14 6 views

Répondre

9

Type de boiteux répondre à ma propre question, mais je l'ai trouvé réponse à cela et ajouter pour les recherches ultérieures.

Pour une raison quelconque, j'ai besoin de log4r/outputter/syslogoutputter explicitement, sinon SyslogOutputter provoquerait une erreur SyslogOutputter (NameError) constante non initialisée. Les autres éditeurs ne semblent pas avoir ce problème.

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

raj

+4

Il n'est certainement pas boiteux de répondre à votre propre question si vous trouvez la réponse. – silvamerica

+0

Je devais ajouter 'include Log4r' après require ou utiliser' Log4r :: Logger' et 'Log4r :: Syslogoutputter' – xorpaul

1

Je trouve cela très utile, mais je devais faire d'autres modifications. Quelque chose a essayé de rouvrir le syslog, provoquant un RuntimeError non gérée. Je l'ai fixé avec cette hache-fou override dans des environnements/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." 

Il y a probablement une façon beaucoup plus joli de le faire, mais cela semble le faire pour moi.

Questions connexes