Ruby 新手 我现在有一个简单的驱动程序脚本,可以在其他 ruby 文件中运行多个测试脚本。我有一个运行测试脚本的名为 RunScript() 的方法。记录器在驱动程序脚本中创建为全局变量,以便其他文件中的测试脚本可以使用它。记录器记录到目录中的日志文件。
我想要做的是捕获仅在方法 RunScript() 运行时发生的日志记录输出并将其存储为字符串。所以基本上我想要每个测试脚本的日志输出字符串,并保留存储所有输出的日志文件。
Ruby 新手 我现在有一个简单的驱动程序脚本,可以在其他 ruby 文件中运行多个测试脚本。我有一个运行测试脚本的名为 RunScript() 的方法。记录器在驱动程序脚本中创建为全局变量,以便其他文件中的测试脚本可以使用它。记录器记录到目录中的日志文件。
我想要做的是捕获仅在方法 RunScript() 运行时发生的日志记录输出并将其存储为字符串。所以基本上我想要每个测试脚本的日志输出字符串,并保留存储所有输出的日志文件。
我已经以几种不同的方式完成了这项工作,我发现最方便的是构建一个委托对象,将消息路由到两个或多个记录器:
require 'stringio'
require 'logger'
class LoggerTee
def initialize *loggers
@loggers = loggers
end
def method_missing meth, *args, &block
@loggers.each { |logger| logger.send(meth, *args, &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 只有几种日志记录方法,您可以简单地制作自己的日志并在该函数中记录和收集日志
#the_logger - regular logger
#the_arr - a global array to keep your logs in
#the_string - log string
def log_info(the_logger, the_arr, the_string)
the_logger.info(the_string);
the_arr.push(the_string);
end
.....................and use global the_arr to get your output
对“调试”、“信息”、“致命”执行此操作,这是在运行程序时使用日志输出的简单方法