2012-04-02 24 views
4

pythonアプリケーションをApache環境で実行していて、timedRotatingFileHandlerを使用してログを記録しています。 私は毎日真夜中に回転するはずの設定ロガーを持っています。私のすべてのプロセスは、同じロガーファイルに書き込みます。何らかの形でログ情報がログに記録されないことがあります。そして、時々、ロガーが2つのファイル(古いファイルと回転したファイル)に同時に書き込むのを見ています。Python TimedRotatingFileHandler - ログがありません

なぜこれが起こっているのか理解できませんでしたか? TimedrotatingFileHandlerはマルチプロセス環境で動作しませんか?そうでない場合はどうしてですか?

OSが書き込みをシリアル化し、2つの異なるプロセスからの指示を回転させる方法を知らないので単純に複数のプロセスから同じファイルにログ(および回転)することはできません

+0

複数のpythonプロセスが同じログファイルに書き込んでいますか?どのような設定があり、どのようなログの設定ですか? –

+0

はい、すべてのプロセスが同じファイルに書き込まれます。 – leela

答えて

4

...私が理解するのに役立ちます。あなたが経験していることは、2つのプロセスが同じファイルに書き込み、それを閉じて、回転時に同時に新しいファイルハンドルで開くことが競合しているため、競合状態と呼ばれます。回転するときに1つのプロセスだけが新しいファイルハンドルを獲得するため、欠落しているログイベントを説明することができます。

ここには、同じ場所にログインするためのヒントを示すPythonのドキュメントのレシピがあります。

http://docs.python.org/howto/logging-cookbook.html#logging-to-a-single-file-from-multiple-processes

基本的に、あなたは別のプロセスが複数の場所からのログイベントに耳を傾け、そのプロセスは、単一のファイルにイベントを記録します持っていることになるでしょう。そのリスナー・プロセスでローテーションを構成することもできます。

これを書く方法がわからない場合は、SentryやFacebook Scribeなどのパッケージをお試しください。スクライブは設定が簡単ではないので、Sentryをお勧めします。

関連する問題