在再次写入之前,如何让logger删除现有的日志文件?

时间:2014-02-06 00:40:42

标签: python logging filehandler

使用下面的配置,我的日志文件将被称为'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)

3 个答案:

答案 0 :(得分:42)

试试这个:

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

write模式而非append模式打开文件名,clobbering logger.name

更多信息:logging.FileHandler docs,open() and list of modes

答案 1 :(得分:0)

如果您正在使用任何外部配置文件,则在处理程序的args中为写入模式传递“ w”。

[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

答案 2 :(得分:0)

如果要删除现有文件,可以尝试以下操作:

right1

很简单,它对我有用。