Ruby on Rails (2.0.2)のloggerについて教えてください。

下記のようなクラスを書いて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

回答の条件
  • 1人2回まで
  • 登録:2008/09/26 15:01:34
  • 終了:2008/10/03 15:05:02

回答(1件)

id:znz No.1

znz回答回数193ベストアンサー獲得回数252008/09/27 01:24:29

ポイント60pt

使い方は間違っていなくて、RAILS_DEFAULT_LOGGERがActiveSupport::BufferedLoggerでauto_flushing=1000になっていて1000回ログ出力用のメソッドが呼ばれるまでバッファリングされているからのようです。

development環境の時はauto_flushing=1なので毎回すぐにログに出ているようです。

すぐにログに出てほしいのならauto_flushingの数を小さくするとかflushメソッドを呼ぶなどすればよいのではないでしょうか。

id:tak-n

ありがとうございます。

Flushという概念がよく分かっていませんが、

バッチ処理の結果をログに出力するというのはよくあるニーズな気がしますので、何か別の方法を考えたほうがいいんですかね・・。

2008/10/02 01:31:56

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません