Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Введение логов


Автор: Akeem 2.8.2006, 13:44
Я вот перелопатил уйму литературы, но всё равно не могу понять как использовать методы класса. 

Есть примеры, но они не срабатывают.

Можете обьяснить что к чему?

Если есть какие-то другие методы ведение логов работы программы то прошу их тоже озвучить!

Автор: skalex 2.8.2006, 14:06
Akeem, а в чем конкретно проблема?

Пример из документации к библиотеке работает без претензий:

Код
require 'log4r'
include Log4r

log = Logger.new 'log'
log.outputters = Outputter.stdout

log.debug "Debug message"
log.info "Info message"
log.warn "Warn message"
log.error "Error message"
log.fatal "Fatal message"

Автор: Akeem 2.8.2006, 14:11
Мне надо писать логи в файл. 
И мне не понятно как использовать подкласс FileOutputter

Автор: Akeem 2.8.2006, 15:17
Мне вот не понятна такая штука. Я пишу 

Код

logfile = FileOutputter.new('logfile.log')


А оно мне выдает:
Код

H:/rb/ftp/ftp_conn.rb:31:in `log_programm': Argument 'filename' must be a String
(TypeError)
        from H:/rb/ftp/ftp_conn.rb:33


что за глюк. почему не хочет распознавтася класс String?

Автор: Rubynovich 2.8.2006, 17:04
Параметр name -- это название лога (их может быть несколько, надо же их как-то опознавать), а не файла. Имя файла передается в качестве хеша.
Код

require 'log4r'
logfile = Log4r::FileOutputter.new('Мой лог',:filename=>'logfile.log')

Автор: Akeem 2.8.2006, 17:58
Rubynovich, Хорошо я всё зделал  как ты указал. 

Я добавил строку 
Код

$log = Log4r::FileOutputter.new('mylog',:filename=>Config::NAME_LOG_FILE)

замисть строк
Код

$log = Logger.new 'log'
$log.outputters = Outputter.stdout


но теперь мне выдает

Код

c:/ruby/lib/ruby/site_ruby/1.8/log4r/formatter/formatter.rb:56:in `format': undef
ined method `level' for "Your horizontal and vertical mask install default values
":String (NoMethodError)
        from c:/ruby/lib/ruby/site_ruby/1.8/log4r/outputter/outputter.rb:118:in `
format'
        from c:/ruby/lib/ruby/site_ruby/1.8/log4r/outputter/outputter.rb:108:in `
canonical_log'
        from c:/ruby/lib/ruby/site_ruby/1.8/log4r/outputter/outputter.rb:128:in `
synch'
        from c:/ruby/lib/ruby/1.8/thread.rb:135:in `synchronize'
        from c:/ruby/lib/ruby/site_ruby/1.8/log4r/outputter/outputter.rb:128:in `
synch'
        from c:/ruby/lib/ruby/site_ruby/1.8/log4r/outputter/outputter.rb:108:in `
canonical_log'
        from (eval):3:in `warn'
        from H:/rb/ftp/ftp_conn.rb:317


Добавлено @ 17:59 
до этого работало.  smile 

Автор: Rubynovich 2.8.2006, 18:40
Код

require 'log4r'
$log = Log4r::Logger.new 'log'
$log.outputters = Log4r::FileOutputter.new('log',:filename=>Config::NAME_LOG_FILE), Log4r::Outputter.stdout

$log.warn 'hello'


У меня все работает!

Автор: Akeem 2.8.2006, 20:30
Rubynovich
Понял. Спасибо. Всё заработало.
Вот правда оно также в консоль выводит. Наверное не надо дописывать 
Код

, Log4r::Outputter.stdout


Добавлено @ 20:32 
Точно не надо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)