Правильно с помощью Log4r в Приложении Ruby

Я должен действительно пропускать что-то очевидное, но я испытываю затруднения из-за общего использования Log4r в моем приложении Ruby. Я могу зарегистрироваться без проблемы, но издержки кажутся неуклюжими способ, которым у меня есть он установка. Я являюсь в основном передающим полный путь к имени файла для входа в систему каждого класса в моем приложении. Рубиновый сценарий, который называют, вытягивает файл журнала от одного из аргументов в ARGV, который затем роздан и установлен в каждом классе, который я называю в рубине. В каждом классе я использую patternFormatter для вставки класса/имени файла в оператор журнала.

Существует ли лучший способ сделать эту работу? Похоже тому о независимо от того, чем я думаю, потребует, чтобы что-то было передано каждому классу в моем рубиновом приложении. Я мог установить файл журнала в yaml конфигурационном файле вместо этого, но затем я буду раздавать конфигурационный файл к каждому классу также.

Совет? Если это не имеет смысла, я мог бы попытаться отправить некоторые более определенные примеры кода для дальнейшего объяснения, что я имею в виду.

Спасибо!

7
задан Spencer 18 March 2010 в 19:42
поделиться

1 ответ

Хм, есть ли причина, по которой вы не создаете экземпляр класса Log4r :: Logger в начале вашего скрипта и не передаете этот экземпляр? Вам даже не нужно передавать его, вы всегда можете получить его по имени из Logger class:

run.rb:

require 'log4r'
require 'class_a'

logger = Log4r::Logger.new('test')
logger.outputters << Log4r::Outputter.stdout
logger.outputters << Log4r::FileOutputter.new('logtest', :filename =>  'logtest.log')
logger.info('started script')
a = A.new
a.do_something
logger.info('finishing')

class_a.rb:

class A
  def do_something
    logger = Log4r::Logger['test']
    logger.info('in do_something')
    puts 'hi!'
  end
end

и когда вы запустите run.rb вы получите:

$ ruby run.rb 
 INFO test: started script
 INFO test: in do_something
hi!
 INFO test: finishing

и файл журнала с именем logtest.log на диске.

12
ответ дан 6 December 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: