1

Rails環境にアクセスできるデーモンの実行に取り組んでいます。少し調べてみると、そうするときに処理する必要があることが2つあります。

  1. Rails データベースへの接続の再初期化
  2. Rails ロガーの再初期化

データベースへの接続を再初期化する必要があることは理解していますが、ロガーはそうではありません。Railsでデーモンを実行するのを少し簡単にすることを目的としたこのコードを見ました。、、、、のそれぞれRailsに対して新しい BufferedLogger インスタンスを作成します。ActiveRecord::BaseActionController::BaseActionMailer::Base

私には2つのことが不明です。

  1. 4 つの異なるロガーがあるのはなぜですか? logger.infoコントローラー内のコードとモデル内のコードから呼び出す場合、同じ Rails ロガーを使用していませんか?
  2. デーモンでロガーを再初期化する必要があるのはなぜですか? そうでない場合、ロガーがロックされていると言ってログを拒否していることに気付きました。しかし、なぜ?

私が発見したことの 1 つは、Rails ロガーを理解するのに苦労している人がかなり多いということです。このトピックを取り上げたブログ記事がすでにある場合は、お知らせください。

4

1 に答える 1

1

Rails 3 で 4 つのロガーが導入されたと思います。各コンポーネント (ActiveRecord、ActionPack、ActionMailer) は実際には相互に依存しておらず、スタンドアロンで使用できるはずであるという考え方が背後にあります。したがって、それぞれが独自のロガー オブジェクトを持つ理由です。これら4つのロガーすべてが基本的に同じインスタンスに設定されているrailties gemにあると思うので、それらのいずれかでlogger.infoを呼び出すと同じ結果になります。ただし、理論的には、たとえば ActiveRecord ロガーを別のものに設定できます。

ロガーを再初期化する必要がある理由についてはわかりません...

于 2013-02-24T00:27:35.423 に答える