5

Python プログラムが使用する開いているログ ファイルを誰かがうっかり移動してしまいました。プログラムは、TimedRotatingFileHandler で logging モジュールを使用します。ファイルをロールオーバーするときが来たとき、次のエラーが出力されました。

Traceback (most recent call last):
File "/python_root/lib/logging/handlers.py", line 78, in emit
    self.doRollover()
  File "/python_root/lib/logging/handlers.py", line 338, in doRollover
    os.rename(self.baseFilename, dfn)
OSError: [Errno 2] no such file or directory
Logged from file logtest.py, line 16

後続の何かをログに記録しようとするたびに、エラーが繰り返されました。ログに記録されたメッセージは、古い (移動された) ログ ファイルには入りませんでした。

これは問題を再現します(ログファイルを移動した場合:))

import time
import logging
from logging import handlers

f = logging.Formatter( "%(asctime)s %(message)s" )
h = handlers.TimedRotatingFileHandler(
      "testlog", when='s', interval=5, backupCount=10 )
h.setFormatter( f )
logger = logging.getLogger( 'test' )
logger.setLevel( logging.INFO )
logger.addHandler( h )
logger.info( "LOGTEST started" )
for i in range( 10 ):
    time.sleep( 5 )
    logger.info( "Test logging " + str( i ) )

ここでの私の懸念は、後続のログ メッセージが失われることです。私が達成したいのは、好みの昇順です。

  1. 終了する例外。
  2. 私がキャッチして処理できる例外。
  3. ロガーはエラーを表示しますが、後続のメッセージは古いログ ファイルに移動します。
  4. ロガーはこのエラーを表示しますが、新しいログ ファイルを開き、通常どおり続行します。

関連するフックについてドキュメント/クックブックをざっと調べましたが、何も見つかりませんでした。ポインターも同様に歓迎されます。

ご協力いただきありがとうございます、

ジョナサン

4

1 に答える 1

1

で発生した例外は、ハンドラーdoRolloverのメソッドに渡されます。handleErrorサブクラスを定義し、このメソッドをオーバーライドして、エラーを処理するために必要なことは何でも行うことができます。

于 2013-09-04T23:51:53.403 に答える