Log Rotación en un directorio usando Python

Tengo un archivo llamado Poller.log y se adjunta con detalles de registro todo el tiempo. Quiero que este archivo de registro se rote todos los días y esté limitado por 30 días. Por lo tanto, el código funciona bien.

Ahora quiero que estos registros que se han girado estén en una carpeta (es decir, logs / poller.log.2011-03-04_15-36). ¿Hay alguna forma de dirigir dónde se debe crear este archivo girado?

Este script en python será ejecutado por Cron.

import logging import logging.handlers LOG_FILENAME = '/home/stackoverflow/snmpdata/poller.log' # Set up a specific logger with our desired output level poll_logger = logging.getLogger('pollerLog') # Add the log message handler to the logger log_rotator = logging.handlers.TimedRotatingFileHandler(LOG_FILENAME, when='d', interval=1, backupCount=30, encoding=None, delay=False, utc=False) poll_logger.addHandler(log_rotator) # Roll over on application start poll_logger.handlers[0].doRollover() 

El controlador de registro de Python no permite hacer eso fácilmente. Es posible que tengas 2 maneras de lograr esto:

  1. La forma más sencilla sería configurar LOG_FILENAME para que ya esté en logs / poller.log, y si desea acceder a su poller.log en cualquier otro lugar, use un enlace simbólico 🙂

  2. Cree su propio controlador a partir de TimedRotatingFileHandler y copie / pegue el doRollover () de /usr/lib/python2.X/logging/handlers.py, clase TimedRotatingFileHandler. Y cambio :

  dfn = self.baseFilename + "."  + time.strftime (self.suffix, timeTuple) 

a

  dfn = os.path.join ('logs', os.path.basename (self.baseFilename)) ".  + time.strftime (self.suffix, timeTuple) 

Si no le importa la dependencia adicional, siempre puede usar el módulo de registro de reinversión en trenzado. Twisted tiene un módulo de archivo de registro que permite registros diarios, registros semanales o incluso registros mensuales como esta situación.