How do I get logger to delete existing log file before writing to it again?
37,614
Solution 1
Try this:
filehandler_dbg = logging.FileHandler(
logger.name + '-debug.log',
mode='w')
to open the filename in write
mode instead of append
mode, clobbering logger.name
More information: logging.FileHandler docs, open()
and list of modes
Solution 2
If you are using any external configuration file then pass 'w' for write mode in args of the handler.
[loggers]
keys=root
[logger_root]
level=DEBUG
handlers=file_handler
[handlers]
keys=file_handler
[handler_file_handler]
class=FileHandler
formatter=formatter
args=("../log/test" + time.strftime("%%Y%%m%%d%%H%%M%%S") + '.log', 'w')
[formatters]
keys=formatter
[formatter_formatter]
format=%(asctime)s %(levelname)-5s [%(module)s] %(message)s
Author by
Paul H
Updated on July 09, 2022Comments
-
Paul H almost 2 years
Using the configuration below, my logfile will be called 'test-debug.log' and it will grow infinitely for everytime I run the script. I just want this logfile to contain the log records from the most recent run of the script. The log should be deleted before starting again.
How do I do that?
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)
-
Paul H over 10 yearsThanks, It now works perfectly.. I had actually looked at the documentation for the
filehandler
, but there was no further information about what and whymode=a
was the default.. Now I think I understand that it comes fromfileIO
syntax or something like that? -
dmcc over 10 yearsExactly. There's a list of all the modes here: docs.python.org/2/library/functions.html#open
-
nick fox over 6 yearsits a shame that the docs for logging don't link back to that functions#open page, that would be really useful.
-
Ken Shirriff about 4 yearsIf you're using
logging.basicConfig
, addingfilemode='w'
has the same effect.