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?
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
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>]