web-dev-qa-db-ja.com

ロガーが既存のログファイルに再度書き込む前に削除するにはどうすればよいですか?

以下の構成を使用すると、ログファイルは「test-debug.log」と呼ばれ、スクリプトを実行するたびに無限に大きくなります。このログファイルには、スクリプトの最新の実行からのログレコードを含めるだけです。ログは、再起動する前に削除する必要があります。

それ、どうやったら出来るの?

logger = logging.getLogger('test') #Create a log with the same name as the script that created it
logger.setLevel('DEBUG')


#Create handlers and set their logging level
filehandler_dbg = logging.FileHandler(logger.name + '-debug.log')
filehandler_dbg.setLevel('DEBUG') 


#Create custom formats of the logrecord fit for both the logfile and the console
streamformatter = logging.Formatter(fmt='%(levelname)s:\t%(threadName)s:\t%(funcName)s:\t\t%(message)s', datefmt='%H:%M:%S') #We only want to see certain parts of the message


#Apply formatters to handlers
filehandler_dbg.setFormatter(streamformatter)


#Add handlers to logger
logger.addHandler(filehandler_dbg)
38
Paul H

これを試して:

filehandler_dbg = logging.FileHandler(logger.name + '-debug.log', mode='w')

ファイル名をwriteモードではなくappendモードで開き、logger.nameを上書きする

詳細: logging.FileHandler docs、 open()およびモードのリスト

46
dmcc