从我在rails应用程序中的脚本/目录中,我试图捕获从lib文件生成的输出,而不是在屏幕上显示它,我希望它保存到文件中。我有一个脚本,它应该在调用“puts”时显示输出到屏幕,但是在调用产生输出的方法之前,它应该设置一些东西,以便调用的函数在使用puts时应该记录到文件。我一直在试验我的rails应用程序中的以下两个文件,但它们似乎不起作用。 (正确地将stderr输出捕获到文件中,但是从简单调用“puts”产生的输出不会保存到以下代码中的文件“a.log”中:)
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/boot'
require File.join(RAILS_ROOT, 'lib/mylogger.rb')
puts "logtest" # should output logtest on the screen
STDERR.puts "logtest" # should also output on the screen
x = STDOUT
y = STDERR
STDOUT = File.new("a.log", "w")
STDERR = File.new("b.log", "w")
m = MyLogger.new
m.run
STDOUT = x
STDERR = y
puts "logtest" # should log to the screen
STDERR.puts "logtest" # should log to the screen
和mylogger.rb文件如下:
class MyLogger
def run
1.upto 1_000_000 do |x|
puts "mylogger #{x}" # should log to the file a.log, this does not work
STDERR.puts "mylogger #{x}" # should log to the file b.log, this works
end
end
end
答案 0 :(得分:3)
$stdout.reopen(File.open("a.log", "w"))
答案 1 :(得分:0)
我改变了行
STDOUT = File.new("a.log", "w")
到
$stdout = File.new("a.log", "w")
我改变了
STDOUT = x
到
$stdout = STDOUT
并且有效