Syslog-Ausgabe für log4r Beispiel

Kann jemand ein Beispiel für die Verwendung von syslog outputter für log4r posten, verwende ich derzeit stdout, möchte mich aber bei syslog anmelden.

mylog = Logger.new 'mylog'
mylog.outputters = Outputter.stdout
mylog.info "Starting up."

raj


Danke auch an die folgenden Blogposts.

Angrez's Blog: Log4r - Verwendung und Beispiele

ProgrammingStuff: Log4r

3

2 Antworten

Irgendwie lahm, meine eigene Frage zu beantworten, aber ich fand eine Antwort darauf und fügte sie für spätere Suchen hinzu.

Aus irgendeinem Grund muss ich log4r/outputter/syslogoutputter explizit verlangen, wenn SyslogOutputter "nicht initialisierten konstanten SyslogOutputter (NameError)" Fehler verursacht. Andere Ausgabeautomaten scheinen dieses Problem nicht zu haben.

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
hinzugefügt
Es ist definitiv nicht lahm, deine eigene Frage zu beantworten, wenn du die Antwort findest.
hinzugefügt der Autor silvamerica, Quelle
Ich musste include Log4r nach dem require hinzufügen oder Log4r :: Logger und Log4r :: Syslogoutputter verwenden
hinzugefügt der Autor xorpaul, Quelle

Ich fand das sehr hilfreich, musste aber weitere Änderungen vornehmen. Es wurde versucht, das Syslog erneut zu öffnen, was zu einem unbehandelten RuntimeError führte. Ich habe es mit diesem Ax-Crazy-Override in Umgebungen/production.rb behoben:

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

Es gibt wahrscheinlich eine viel schönere Art, es zu tun, aber das scheint es für mich zu tun.

1
hinzugefügt