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.

Blog de Angrez: Log4r - Uso y ejemplos

ProgrammingStuff: Log4r

¿Fue útil?

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í.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top