Logging to python file doesn't overwrite file when using the mode='w' argument to FileHandler

Question:

I have some code to set up a log in Python 2.7 (using the logging module):

import os
import logging
logger=logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
log_filename=os.path.join(os.path.dirname(copasi_file),os.path.split(copasi_file)[1][:-4]+'_log.log')
handler=logging.FileHandler(log_filename,mode='w')
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.debug('debugging message')

This code works and I am getting the output, however I intend to use this log to do a lot of debugging so I want to overwrite the log file each time its run. In the docs say to use the mode keyword argument to the ‘FileHandler. It doesn't specify precisely *which* mode to use for overwrite file each time but I think a reasonable assumption would bemode=’w’`. This however doesn’t work. Can anybody tell me why?

Asked By: CiaranWelsh

||

Answers:

I am not familiar with this to much, and I did not really see anything that stuck out in google. Have you tried just using:

    handler=logging.FileHandler(log_filename, 'w')
Answered By: AndrewG

The problem is that the file doesn’t actually get overwritten until a new python shell is started.

Answered By: CiaranWelsh

This solves problem for me:

handler = logging.FileHandler(log_filename, 'w+')
Answered By: NutCracker
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.