加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 在方法中捕获记录器输出

发布时间:2020-12-17 03:05:16 所属栏目:百科 来源:网络整理
导读:Ruby新手我现在有一个简单的驱动程序脚本,可以在其他ruby文件中运行多个测试脚本.我有一个名为RunScript()的方法来运行测试脚本.记录器在驱动程序脚本中创建为全局变量,以便其他文件中的测试脚本可以使用它.记录器记录到目录中的日志文件. 我想要做的是捕获
Ruby新手我现在有一个简单的驱动程序脚本,可以在其他ruby文件中运行多个测试脚本.我有一个名为RunScript()的方法来运行测试脚本.记录器在驱动程序脚本中创建为全局变量,以便其他文件中的测试脚本可以使用它.记录器记录到目录中的日志文件.

我想要做的是捕获在RunScript()方法仅运行时发生的日志记录输出,并将其存储为String.所以基本上我想要每个测试脚本的日志输出字符串,并保留存储所有输出的日志文件.

解决方法

我已经用几种不同的方式完成了这项工作,我发现最方便的是构建一个委托对象,将消息路由到两个或多个记录器:

require 'stringio'
require 'logger'

class LoggerTee

  def initialize *loggers
    @loggers = loggers
  end

  def method_missing meth,*args,&block
    @loggers.each { |logger| logger.send(meth,&block) }
  end

end

capture_stringio = StringIO.new
console_log = Logger.new(STDOUT)
string_log = Logger.new(capture_stringio)
log = LoggerTee.new(console_log,string_log)

log.debug 'Hello world'
puts capture_stringio.string

输出:

D,[2013-04-30T18:59:18.026285 #14533] DEBUG -- : Hello world
D,[2013-04-30T18:59:18.026344 #14533] DEBUG -- : Hello world

在此示例中,LoggerTee类使用两个单独的记录器进行实例化,一个用于控制台,另一个用于StringIO实例.生成的LoggerTee实例是任何标准logger对象的替代品.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读