Я должен действительно пропускать что-то очевидное, но я испытываю затруднения из-за общего использования Log4r в моем приложении Ruby. Я могу зарегистрироваться без проблемы, но издержки кажутся неуклюжими способ, которым у меня есть он установка. Я являюсь в основном передающим полный путь к имени файла для входа в систему каждого класса в моем приложении. Рубиновый сценарий, который называют, вытягивает файл журнала от одного из аргументов в ARGV, который затем роздан и установлен в каждом классе, который я называю в рубине. В каждом классе я использую patternFormatter для вставки класса/имени файла в оператор журнала.
Существует ли лучший способ сделать эту работу? Похоже тому о независимо от того, чем я думаю, потребует, чтобы что-то было передано каждому классу в моем рубиновом приложении. Я мог установить файл журнала в yaml конфигурационном файле вместо этого, но затем я буду раздавать конфигурационный файл к каждому классу также.
Совет? Если это не имеет смысла, я мог бы попытаться отправить некоторые более определенные примеры кода для дальнейшего объяснения, что я имею в виду.
Спасибо!
Хм, есть ли причина, по которой вы не создаете экземпляр класса 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
на диске.