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