salida syslog para el ejemplo log4r

¿Alguien puede publicar un ejemplo de cómo usar syslog outputter 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 en el blog.

Blog de Angrez: Log4r: uso y ejemplos

ProgrammingStuff: Log4r

3

2 Respuestas

Un poco cojo respondiendo mi propia pregunta, pero encontré una respuesta a esto y lo agregué para búsquedas posteriores.

Por alguna razón necesito requerir log4r/outputter/syslogoutputter explícitamente, otro sabio SyslogOutputter causaría un error "SyslogOutputter (NameError) constante no inicializado". Otros reproductores 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

9
agregado
Definitivamente no es tonto responder a su propia pregunta si encuentra la respuesta.
agregado el autor silvamerica, fuente
Necesitaba agregar incluir Log4r después de requerir o usar Log4r :: Logger y Log4r :: Syslogoutputter
agregado el autor xorpaul, fuente

Encontré esto muy útil, pero tuve que hacer más ediciones. Algo intentó volver a abrir el registro del sistema, causando un RuntimeError no administrado. Lo arreglé con esta anulación de hacha loca en environments/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."

Probablemente haya una manera mucho más bonita de hacerlo, pero parece que esto lo hará por mí.

1
agregado