output di syslog per esempio log4r
Domanda
Qualcuno può pubblicare un esempio dell'utilizzo dell'output syslog per log4r, attualmente sto usando stdout ma voglio accedere a syslog.
mylog = Logger.new 'mylog'
mylog.outputters = Outputter.stdout
mylog.info "Starting up."
raj
Grazie anche ai seguenti post del blog.
Soluzione
Tipo di zoppo che risponde alla mia domanda, ma ho trovato la risposta a questa e l'ho aggiunta per le ricerche successive.
Per qualche motivo ho bisogno di richiedere esplicitamente log4r / outputter / syslogoutputter, altrimenti un altro saggio SyslogOutputter causerebbe "costante non inizializzata SyslogOutputter (NameError) " errore. Altri outputer non sembrano avere questo problema.
require 'rubygems'
require 'log4r'
require 'log4r/outputter/syslogoutputter'
mylog = Logger.new 'mylog'
mylog.outputters = SyslogOutputter.new("f1", :ident => "myscript")
mylog.info "Starting up."
raj
Altri suggerimenti
L'ho trovato molto utile, ma ho dovuto apportare ulteriori modifiche. Qualcosa ha tentato di riaprire il syslog, causando un RuntimeError non gestito. L'ho risolto con questo over-ride impazzito in ambienti / produzione.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."
Probabilmente esiste un modo molto più bello di farlo, ma questo sembrerebbe farlo per me.