下記のようなクラスを書いてRAILS_ROOT/libとかに置いて、script/runnerでバッチ処理として起動しているのですが、
development環境ではlog/development.logにきちんと出力されます。
ですが、Production環境(script/runnner -e production)で実行してもlog/production.logに出力されません。
config/environment.rbやconfig/environments以下はデフォルトの設定のままです。
何故ログが出ないのでしょうか?
もしくはそもそもloggerの使い方が間違っているのでしょうか?
class Batch
cattr_accessor :logger #ActiveSupportのクラス変数のアクセサを定義するヘルパ
self.logger ||= RAILS_DEFAULT_LOGGER
def self.some_class
logger.info "Some Message"
end
end
使い方は間違っていなくて、RAILS_DEFAULT_LOGGERがActiveSupport::BufferedLoggerでauto_flushing=1000になっていて1000回ログ出力用のメソッドが呼ばれるまでバッファリングされているからのようです。
development環境の時はauto_flushing=1なので毎回すぐにログに出ているようです。
すぐにログに出てほしいのならauto_flushingの数を小さくするとかflushメソッドを呼ぶなどすればよいのではないでしょうか。
ありがとうございます。
Flushという概念がよく分かっていませんが、
バッチ処理の結果をログに出力するというのはよくあるニーズな気がしますので、何か別の方法を考えたほうがいいんですかね・・。