2014-07-01 4 views
12

Ich benutze Windows 7 und Python 2.7. Ich möchte meine Protokolldateigröße auf 5 MB beschränken. Meine App schreibt beim Start in die Protokolldatei und beendet dann die Anwendung. Wenn meine App erneut gestartet wird, wird sie in dieselbe Protokolldatei geschrieben. Die App läuft also nicht ständig. App initiiert, verarbeitet und beendet.Wie Log-Dateigröße in Python zu begrenzen

für die Protokollierung Mein Code ist:

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 versucht, mit RotatingFileHandler aber es hat nicht funktioniert

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

Also, wie kann ich eine Dateigrößenbeschränkung in Python erzwingen?

+1

RotatingFileHandler ein Weg zu gehen. Wie genau hat es nicht funktioniert? – J0HN

+0

kann sein, weil App nicht ständig läuft oder gibt es falsch in der Codierung – imp

+0

Das beantwortet meine Frage nicht :) Ich frage Sie nicht zu spekulieren, warum es so ist, aber was genau ist falsch mit RotatingFileHandler. Fehler, Ausnahmen, Abstürze, irgendetwas? Schreib es überhaupt um zu loggen? – J0HN

Antwort

24

verlieren basicConfig und versuchen, diese:

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 auf meiner Maschine arbeitet

+0

Works groß. Vielen Dank. – Speakeasys

6

Wenn Sie logging.basicConfig mit einer Datei verwenden, wird das Protokoll mit einem Datei-Handler an dem Schreiben zu handhaben die Datei. danach Sie eine andere Datei-Handler auf die gleiche Datei erstellt mit logging.handlers.RotatingFileHandler

nun einmal drehen benötigt wird, RotatingFileHandler versucht, die alte Datei zu entfernen, aber es kann es nicht becuase ist ein offener Datei-Handler

kann gesehen werden, wenn man direkt in den Log-Datei-Handler zu finden -

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