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 ) )
ここでの私の懸念は、後続のログ メッセージが失われることです。私が達成したいのは、好みの昇順です。
- 終了する例外。
- 私がキャッチして処理できる例外。
- ロガーはエラーを表示しますが、後続のメッセージは古いログ ファイルに移動します。
- ロガーはこのエラーを表示しますが、新しいログ ファイルを開き、通常どおり続行します。
関連するフックについてドキュメント/クックブックをざっと調べましたが、何も見つかりませんでした。ポインターも同様に歓迎されます。
ご協力いただきありがとうございます、
ジョナサン