web-dev-qa-db-de.com

So begrenzen Sie die Größe der Protokolldatei in python

Ich verwende Windows 7 und python 2.7. Ich möchte die Größe meiner Protokolldatei auf 5 MB begrenzen. Meine App schreibt beim Start in die Protokolldatei und beendet dann die App. Wenn meine App beendet wird Wenn die App erneut gestartet wird, schreibt sie in dieselbe Protokolldatei. Die App wird also nicht kontinuierlich ausgeführt. Die App wird initiiert, verarbeitet und beendet.

Mein Code für die Protokollierung lautet:

import logging
import logging.handlers
logging.basicConfig(filename=logfile.log, level="info", format='%(asctime)s %(levelname)s %(funcName)s(%(lineno)d) %(message)s')
logging.info("*************************************************")

Ich habe es mit RotatingFileHandler versucht, aber es hat nicht funktioniert

logging.handlers.RotatingFileHandler(logFile, mode='a', maxBytes=5*1024*1024, backupCount=2, encoding=None, delay=0)

Wie kann ich eine Dateigrößenbeschränkung in Python erzwingen?

28
imp

Verlieren Sie basicConfig und versuchen Sie Folgendes:

import logging
from logging.handlers import RotatingFileHandler

log_formatter = logging.Formatter('%(asctime)s %(levelname)s %(funcName)s(%(lineno)d) %(message)s')

logFile = 'C:\\Temp\\log'

my_handler = RotatingFileHandler(logFile, mode='a', maxBytes=5*1024*1024, 
                                 backupCount=2, encoding=None, delay=0)
my_handler.setFormatter(log_formatter)
my_handler.setLevel(logging.INFO)

app_log = logging.getLogger('root')
app_log.setLevel(logging.INFO)

app_log.addHandler(my_handler)

while True:
    app_log.info("data")

Das funktioniert auf meinem Rechner

44
Shadow9043

Wenn Sie logging.basicConfig für eine Datei verwenden, wird das Protokoll mit einem Dateihandler angehängt, um das Schreiben in die Datei zu handhaben. Anschließend haben Sie mit logging.handlers.RotatingFileHandler einen weiteren Datei-Handler für dieselbe Datei erstellt

Sobald eine Drehung erforderlich ist, versucht RotatingFileHandler, die alte Datei zu entfernen, kann dies jedoch nicht, da ein Dateihandler geöffnet ist

dies kann man sehen, wenn man sich direkt die Protokolldatei-Handler ansieht.

import logging
from logging.handlers import RotatingFileHandler

log_name = 'c:\\log.log'
logging.basicConfig(filename=log_name)
log = logging.getLogger()
handler = RotatingFileHandler(name,maxBytes=1024,backupCount=1)
log.addHandler(handler)


[<logging.FileHandler object at 0x02AB9B50>, <logging.handlers.RotatingFileHandler object at 0x02AC1D90>]
14
AmitE