log4r示例的syslog输出

时间:2008-10-14 15:17:49

标签: ruby log4r

有人可以发布一个使用syslog输出器作为log4r的例子,我目前正在使用stdout但是想登录到syslog。

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

拉​​吉


还要感谢以下博客文章。

Angrez's blog: Log4r - Usage and Examples

ProgrammingStuff: Log4r

2 个答案:

答案 0 :(得分: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."

拉​​吉

答案 1 :(得分:1)

我发现这非常有用,但我不得不进行进一步的编辑。有人试图重新打开syslog,导致未处理的RuntimeError。我在环境/ production.rb中用这个ax-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."

这可能是一种更漂亮的方式,但这似乎对我有用。