我正在尝试将STDERR重定向到一个作为守护程序运行的jruby程序的文件。我之前在MRI中做过这个没有问题,但我似乎错过了jruby中的一些拼图。
log = File.new('/home/my_user/test_log.log', "w")
$stderr.reopen log
$stderr.puts "writing to log!"
require 'some_broken_thing'
MRI中的日志内容(2.0.0-p0):
/path/to/ruby/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- some_broken_thing (LoadError)
from /path/to/ruby/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
from test.rb:5:in `<main>'
writing to log!
日志内容jruby(1.7.4):
writing to log!
我只是想确保像破坏的愚蠢的东西需要或未满足的依赖关系被记录在某处,而不是被解雇到控制台。不知道我做错了什么。当我调用$ stderr.reopen时,破坏的require的错误输出没有出现在控制台中,这很好,但是它从未显示在文件中,这不太好。