有人可以发布一个为 log4r 使用 syslog 输出器的示例吗,我目前正在使用 stdout 但想登录到 syslog。
mylog = Logger.new 'mylog'
mylog.outputters = Outputter.stdout
mylog.info "Starting up."
拉吉
还要感谢以下博客文章。
有人可以发布一个为 log4r 使用 syslog 输出器的示例吗,我目前正在使用 stdout 但想登录到 syslog。
mylog = Logger.new 'mylog'
mylog.outputters = Outputter.stdout
mylog.info "Starting up."
拉吉
还要感谢以下博客文章。
回答我自己的问题有点蹩脚,但我找到了答案并将其添加以供以后搜索。
出于某种原因,我需要明确要求 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."
拉吉
我发现这很有帮助,但我不得不进行进一步的编辑。有东西试图重新打开系统日志,导致未处理的 RuntimeError。我在environments/production.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."
可能有一种更漂亮的方法,但这似乎对我有用。