Salida de syslog para el ejemplo log4r
Pregunta
¿Puede alguien publicar un ejemplo del uso de la salida de syslog para log4r? Actualmente estoy usando stdout pero quiero iniciar sesión en syslog.
mylog = Logger.new 'mylog'
mylog.outputters = Outputter.stdout
mylog.info "Starting up."
raj
Gracias también a las siguientes publicaciones del blog.
Solución
Es un tipo de cojo que responde a mi propia pregunta, pero encontré la respuesta a esta y la agregué para búsquedas posteriores.
Por alguna razón, necesito requerir log4r / outputter / syslogoutputter explícitamente de otra manera SyslogOutputter causaría "SyslogOutputter (NameError) constante sin inicializar" error. Otros emisores no parecen tener este 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
Otros consejos
Encontré esto muy útil, pero tuve que hacer más modificaciones. Algo intentó volver a abrir el registro del sistema, lo que provocó un error de ejecución Runtime. Lo arreglé con esta anulación de hacha loca en los entornos / producción.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."
Probablemente haya una forma mucho más bonita de hacerlo, pero esto parece que lo haga por mí.