2016-04-12 2 views
0

ConcurrentLogHandlerを使用してPythonアプリケーションログメッセージをファイルに記録しています。 TornadoのHTTPServerはサーバーとして本番環境で使用されています。特定の条件(ユーザーフォーム送信)では、ファイルのロールオーバーを強制したいと思います。 私が抱えている問題は、logger.handlers [0] .doRollover()を実行するとロールオーバーが発生せず、エラーも表示されません。私のアプリPython ConcurrentLogHandler:Tornado HttpServerを使用するときにロールオーバーを強制します。

多くのモジュールがログに書き込むには、以下のモジュールから「ロガー」オブジェクトをインポートします。

import logging 
import logging.handlers 
from cloghandler import ConcurrentRotatingFileHandler 
from my_app import app 

logger = logging.getLogger('my_app') 
hdlr = ConcurrentRotatingFileHandler(app.config['LOG_PATH'], maxBytes=5e+8, backupCount=10) 
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
hdlr.setFormatter(formatter) 
logger.addHandler(hdlr) 
logger.setLevel(logging.INFO) 

[logger.handlersを私はRotatingFileHandlerを使用していた、ConcurrentLogHandlerを使用して、実行する前に0] .doRollover()は、スタックの下のos.renameにトリガされた "File busy"エラーを引き起こします。

この設定でロールオーバーを強制する方法はありますか、これを可能にするために必要な変更はありますか? CentOSをサーバーとして使用しているので、ファイルシステムはUNIX/Linuxです。私は、アプリケーションが動作している間、常に[filename] .lockファイルをログファイルに見ることができます。

答えて

0

ConcurrentLogHandlerが実際logger.handlers [0] .doRollover()でロールオーバーすることができ、ありがとうございます。私が持っていた問題は、以前はRotatingLogHandlerを使用していたため、ログファイルのディレクトリに.lockファイルが残っていたため、ロールオーバーされませんでした。ロックファイルを削除し、ConcurrentLogHandlerを(RotatingLogHandlerではなく)選択したハンドラとして保持することで、問題は解決されます。