2012-01-16 8 views
8

初心者のためにはあまりにも不明瞭で不明瞭な文書や効果的なハウツーにもかかわらず、私はPSGIのように成長し、現在私のアプリケーションの1つで使用しています。私が知りたいことは、マルチノードアプリケーション全体のログをどのように管理するかです。 PSGIのログインに関する「ベストプラクティス」とは何でしょうか?PSGI logging(Perl)

+6

[Plack :: Middleware :: AccessLog](http://p3rl.org/Plack::Middleware::AccessLog) –

+0

アクセスログだけではなく、一般的にログインしていますか? –

答えて

5

ロギングアクセスにはPlack::Middleware::AccessLog、カスタムロギングにはPlack::Middleware::LogDispatchを使用することをお勧めします。 どちらも人気のLog::Dispatchモジュールを使用します。

LogDispatchミドルウェアのドキュメントでは、一度ログオブジェクトを設定すると、 の使用方法が示されていません。

my $app = sub { 
    my $env = shift; 
    $env->{'psgix.logger'}->({ level => "debug", message => "This is debug" }); 
    return [ 200, [], [] ]; 
}; 

マルチノードの懸念に対処するために、あなたがして使用することができLog::Dispatch::Syslog今度は別のrsyslogのサーバにログデータを渡すことができたrsyslogへのロギングを送信します:ここでは例です。このようにして、すべてのノードが単一の中央ロギングサーバーにログを記録できます。

Log :: Dispatchの柔軟性により、必要に応じて をローカルとリモートの両方にロギングするオプションもあります。中央サーバが に送信されたログはプライマリと見なすことができ、 ローカルで実行されたログは、中央ログサーバが少し下に である場合にバックアップと見なすことができます。中央のログサーバを使用して

はいくつかの利点があります。

  1. あなたは一つの場所にクラスタ全体でログを「grepする」ことができます。
  2. ログのローテーションと分析は、1セットのログファイルで簡単になります。
  3. ログを失うことを心配することなくノードをシャットダウンしたり、夜間のcronジョブがログを処理するために起動できるようにサーバーを保持したりすることができます。

私は現在、このようにLog :: DispachとRsyslogを併用して、マルチノードクラスタを自分で管理しています。