miércoles, junio 20, 2007

RotatingFile

He estado buscando algo para implementar la escritura en un fichero, con politica de rotación al superar un determinado tamaño, ya que no interesa reinventar nada.
Lo único que he encontrdo es el handler RotatingFileHandler de python.
Dicho handler podría ser valido o no, dependiendo de los requisitos funcionales. A mi, para lo que tengo que hacer no, pero ahí va un ejemplo de su uso. Una clase que lo recubre:


import logging
import sys
from logging.handlers import RotatingFileHandler

#------------------------------------------------------------------------------
# RotatingFile
#------------------------------------------------------------------------------

class RotatingFile:

#------------------------------------------------------------------------------


def __init__(self,pathFilename,numBytes=0,numFiles=0):
"""
Notas:
- El fichero es de texto
- Para que exista la rotación los argumentos opcionales no pueden ser
0.
"""

# Notas:
# - Como al logger no se le fija un nivel, sacará todo
# - Al logger se le pone como identificador, la ruta al fichero.
# - Si numFiles es muy alto el algofirmo que se usa en el 'handler'

self.__logFile = pathFilename
self.__logger = logging.getLogger(self.__logFile)
hdlr = RotatingFileHandler( self.__logFile,'a',numBytes,numFiles )
fmt = logging.Formatter("%(message)s")
hdlr.setFormatter(fmt)
self.__logger.addHandler(hdlr)


#------------------------------------------------------------------------------

def write(self,value):
self.__logger.critical(value)

#------------------------------------------------------------------------------
# main (de prueba)
#------------------------------------------------------------------------------

if ( __name__ == "__main__") :
rf = RotatingFile("rotatingfile.out",10,5)
for i in range(10):
rf.write(str(i))

No hay comentarios: