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