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.

Blog di Angrez: Log4r - Uso ed esempi

ProgrammingStuff: Log4r

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top