Из моего скрипта / каталога в приложении rails я пытаюсь захватить вывод, полученный из файла lib, и вместо того, чтобы отображать его на экране, я хочу, чтобы он был сохранен в файл. У меня есть скрипт, который должен отображать вывод на экран, когда он вызывает «put», но перед вызовом метода, который производит вывод, он должен установить что-то, чтобы вызываемая функция регистрировала файл, когда она использует put. Я экспериментировал со следующими двумя файлами в моем приложении rails, но, похоже, они не работают. (Вывод stderr корректно записывается в файл, но результат, полученный в результате простого вызова «put», не сохраняется в файле «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