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.