デーモンとして実行される jruby プログラムのファイルに STDERR をリダイレクトしようとしています。以前に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!
私は単に、require の破損や満たされていない依存関係などのばかげたことを、コンソールに出力するのではなく、どこかに記録できるようにしようとしています。私が間違っているのかわかりません。$stderr.reopen を呼び出すと、壊れた require からのエラー出力がコンソールに表示されません。これは良いことですが、ファイルに表示されることはありません。これはあまり良くありません。