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/10/03 15:05:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:znz No.1

回答回数193ベストアンサー獲得回数25

ポイント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

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

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

トラックバック

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

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

回答リクエストを送信したユーザーはいません