Saltar al contenido

Cómo limitar el tamaño del archivo de registro en python

Presta atención porque en este post vas a encontrar la solución que buscas.

Solución:

Perder basicConfig() y use RotatingFileHandler:

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

cuando usas registro.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 para el mismo archivo con
logging.handlers.RotatingFileHandler

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

esto se puede ver si observa directamente 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(log_name, maxBytes=1024, backupCount=1)
log.addHandler(handler)


[, ]

Para usar BasicConfig y RotatingFileHandler, agregue RotatingFileHandler como controlador en BasicConfig.

principal.py:

import logging

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

logging.basicConfig(
    level=logging.DEBUG,
    format="%(asctime)s %(name)-25s %(levelname)-8s %(message)s",
    datefmt="%y-%m-%d %H:%M:%S",
    handlers=[
        rfh
    ]
)

logger = logging.getLogger('main')

logger.debug("test")

otro.py

import logging

class Other():
    def __init(self):
        self.logger = logging.getLogger('other')
        self.logger.info("test2")

“test” se escribirá en foo.log con la etiqueta ‘main’

“test2” se escribirá en foo.log con la etiqueta ‘otro’

Comentarios y valoraciones

Finalizando este artículo puedes encontrar las acotaciones de otros programadores, tú incluso tienes la opción de mostrar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *