2009-09-27 60 views
13

我有一个小框架,它使用内置于ruby的Logger对象记录一些信息和调试消息。在运行时,这很好。在单元测试时间(使用rspec,如果它很重要...)我想将记录的消息转储到内存字符串变量中。做这件事最简单的方法是什么?Ruby:将记录器消息发送到字符串变量?

我正在考虑猴子补丁将取代信息和调试方法,像这样:


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

有没有更好的方法去送我的日志消息给一个字符串变量?

回答

29

使用StringIO

require 'stringio' 
require 'logger' 

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

puts strio.string 
+0

只是删除括号有rubyish风格。 – khelll 2009-09-27 19:36:29

+2

删除了括号。就个人而言,我更喜欢使用括号,但我编辑它以更符合问题中使用的编码风格。 – hrnt 2009-09-27 19:50:43

+0

谢谢,hrnt。这正是我一直在寻找的! – 2009-09-28 00:00:29