saída syslog para o exemplo log4r

Alguém pode postar um exemplo de usar o syslog outputter para log4r, atualmente estou usando stdout mas deseja logar ao syslog.

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

raj


Obrigado também aos posts do blog.

Blog de Angrez: Log4r - Uso e exemplos

ProgrammingStuff: Log4r

3

2 Respostas

Tipo de idiota respondendo a minha própria pergunta, mas eu encontrei resposta para isso e adicionando-a para pesquisas posteriores.

Por alguma razão, eu preciso exigir log4r/outputter/syslogoutputter explicitamente outro SyslogOutputter sábio causaria erro "não inicializado constante SyslogOutputter (NameError)". Outros outputters não parecem ter esse 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

9
adicionado
Definitivamente não é idiota responder à sua própria pergunta se encontrar a resposta.
adicionado o autor silvamerica, fonte
Eu precisava adicionar include Log4r após o require ou usar Log4r :: Logger e Log4r :: Syslogoutputter
adicionado o autor xorpaul, fonte

Achei isso muito útil, mas tive que fazer mais edições. Algo tentou reabrir o syslog, causando um RuntimeError não manipulado. Eu consertei com essa substituição de machados em ambientes/produção.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."

Há provavelmente uma maneira muito mais bonita de fazer isso, mas isso parece fazer isso por mim.

1
adicionado