web-dev-qa-db-fra.com

Comment limiter la taille du fichier journal dans python

J'utilise Windows 7 et python 2.7. Je veux limiter la taille de mon fichier journal à 5 ​​Mo. Mon application, lorsqu'elle démarre, écrit dans le fichier journal, puis l'application se termine. Lorsque mon application redémarre, il écrit dans le même fichier journal. L'application n'est donc pas en cours d'exécution. L'application démarre, traite et se termine.

Mon code pour la journalisation est:

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

J'ai essayé avec RotatingFileHandler mais cela n'a pas fonctionné

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

Alors, comment puis-je appliquer une limite de taille de fichier en python?

28
imp

Perdez basicConfig et essayez ceci:

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

Cela fonctionne sur ma machine

44
Shadow9043

Lorsque vous utilisez logging.basicConfig avec un fichier, le journal est attaché avec un gestionnaire de fichiers pour gérer l'écriture dans le fichier. vous avez ensuite créé un autre gestionnaire de fichiers dans le même fichier avec logging.handlers.RotatingFileHandler

Maintenant, une fois qu'une rotation est nécessaire, RotatingFileHandler essaie de supprimer l'ancien fichier, mais il ne peut pas car il existe un gestionnaire de fichiers ouvert

cela peut être vu si vous regardez directement les gestionnaires de fichiers journaux -

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