3

log4r に syslog outputter を使用する例を投稿できますか?現在 stdout を使用していますが、syslog にログを記録したいと考えています。

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

ラジ


また、次のブログ記事にも感謝します。

Angrez のブログ: Log4r - 使用法と例

プログラミングスタッフ: Log4r

4

2 に答える 2

9

自分の質問に答えるのはちょっと不自由ですが、これに対する答えを見つけて、後で検索するために追加しました。

何らかの理由で、log4r/outputter/syslogoutputter を明示的に要求する必要があります。そうしないと、SyslogOutputter によって「初期化されていない定数 SyslogOutputter (NameError)」エラーが発生します。他のアウトプッターにはこの問題はないようです。

require 'rubygems'
require 'log4r'
require 'log4r/outputter/syslogoutputter'
mylog = Logger.new 'mylog'
mylog.outputters = SyslogOutputter.new("f1", :ident => "myscript")
mylog.info "Starting up."

ラジ

于 2008-10-15T06:16:26.927 に答える
1

これは非常に役に立ちましたが、さらに編集する必要がありました。何かがsyslogを再度開こうとしたため、未処理のRuntimeErrorが発生しました。私はenvironments/production.rbのこのaxe-crazyオーバーライドでそれを修正しました:

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

おそらくもっときれいな方法がありますが、これは私にとってはそれを行うように思われます。

于 2009-05-20T09:37:03.600 に答える