rotatingfilehandler practices logger filemode example best python logging filehandler log-files

practices - Cómo limitar el tamaño del archivo de registro en Python



python logging formatter example (2)

Estoy usando windows 7 y python 2.7. Quiero limitar el tamaño de mi archivo de registro a 5MB. Mi aplicación, cuando se inicia, escribe en el archivo de registro y, a continuación, la aplicación finaliza. Cuando mi aplicación se inicie de nuevo, se escribirá en el mismo archivo de registro. Así que la aplicación no se ejecuta continuamente. La aplicación inicia, procesa y termina.

Mi código para el registro es:

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

Probé con RotatingFileHandler pero no funcionó

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

Entonces, ¿cómo puedo imponer un límite de tamaño de archivo en Python?


Cuando usa logging.basicConfig con un archivo, el registro se adjunta con un controlador de archivos para manejar la escritura en el archivo. luego creó otro controlador de archivos en el mismo archivo con logging.handlers.RotatingFileHandler

Ahora, una vez que se necesita una rotación, RotatingFileHandler está tratando de eliminar el archivo antiguo, pero no puede porque hay un controlador de archivos abierto

Esto se puede ver si nos fijamos directamente en los controladores de archivos de registro.

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


Pierde basicConfig y prueba esto:

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

Esto funciona en mi maquina