2014-07-01 16 views
12

Sto usando Windows 7 e Python 2.7. Desidero limitare le dimensioni del file di registro a 5 MB. La mia app, quando viene avviata, scrive sul file di registro e quindi termina l'app. Quando la mia app si riavvia, scriverà nello stesso file di registro. Quindi l'app non è in esecuzione continua. L'app avvia, elabora e termina.Come limitare la dimensione del file di registro in python

Il mio codice per la registrazione è:

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("*************************************************") 

ho provato con RotatingFileHandler ma non ha funzionato

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

Così, come posso far rispettare un limite di dimensione del file in Python?

+1

RotatingFileHandler è un modo per andare. Come esattamente non ha funzionato? – J0HN

+0

potrebbe essere dovuto al fatto che l'app non è continuamente in esecuzione o c'è qualche errore nella codifica – imp

+0

Che non risponde alla mia domanda :) Non ti sto chiedendo di speculare sul perché sia ​​così, ma COSA è esattamente sbagliato con RotatingFileHandler. Errori, eccezioni, arresti anomali, niente? Scrive per registrare? – J0HN

risposta

24

perdere basicConfig e provare questo:

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") 

Questo funziona sulla mia macchina

+0

Funziona alla grande. Grazie. – Speakeasys

6

Quando si utilizza logging.basicConfig con un file, il registro è attaccato con un gestore di file per gestire la scrittura il file. poi si è creato un altro gestore file per lo stesso file con logging.handlers.RotatingFileHandler

Ora, una volta è necessaria una rotazione, RotatingFileHandler sta cercando di rimuovere il vecchio file, ma non può becuase v'è un open Filehandler

questo può essere visto se si guarda direttamente i gestori di file di log -

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