我正在尝试将 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 的错误输出不会显示在控制台中,这很好,但它永远不会出现在文件中,这不太好。