2014-02-06 4 views
21

Mit der unten stehenden Konfiguration wird meine Logdatei "test-debug.log" heißen und für jedes Mal, wenn ich das Skript ausführe, wird es unendlich wachsen. Ich möchte nur, dass diese Protokolldatei die Protokolldatensätze aus der letzten Ausführung des Skripts enthält. Das Protokoll sollte vor dem nächsten Start gelöscht werden.Wie bekomme ich Logger zum Löschen vorhandener Protokolldateien vor dem erneuten Schreiben?

Wie mache ich das?

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) 

Antwort

28

Try this:

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

den Dateinamen in write Modus statt append-Modus zu öffnen, clobbering logger.name

Weitere Informationen: logging.FileHandler docs, open() and list of modes

+0

Danke, es funktioniert jetzt perfekt .. Ich hatte mir tatsächlich die Dokumentation für den 'Dateihandler' angeschaut, aber es gab keine Weitere Informationen darüber, was und warum 'mode = a' war der Standard .. Jetzt glaube ich zu verstehen, dass es von' fileIO' Syntax oder so ähnlich kommt? –

+1

Genau. Es gibt eine Liste aller Modi hier: http://docs.python.org/2/library/functions.html#open – dmcc

+0

es ist eine Schande, dass die Dokumente für die Protokollierung nicht zurück zu den Funktionen verknüpfen # offene Seite, dass wäre wirklich nützlich. –