Ruby: отправлять сообщения журнала в строковую переменную?

У меня есть небольшая структура, которая регистрирует некоторые сообщения информации и отладки, используя объект Logger, встроенный в ruby. Во время работы это отлично работает. В unit test время (с помощью rspec, если это важно...) Я хотел бы сбросить записанные сообщения в переменную строки памяти. Какой самый простой способ сделать это?

Я рассматривал патч обезьяны, который заменил бы методы информации и отладки, например:


class Logger
  def info msg
    $logs = msg
    super msg
  end
end

есть ли лучший способ отправить мои сообщения журнала на строковую переменную?

Ответы

Ответ 1

Используйте StringIO

require 'stringio'
require 'logger'

strio = StringIO.new
l = Logger.new strio
l.warn "whee, i am logging to a string!"

puts strio.string