Editar: Terminé respondiendo el problema de mi pregunta para poder tener un módulo de registro de trabajo. Sin embargo, todavía tengo una pregunta relacionada. Ver mi respuesta a continuación.Manejadores de registro: ¿Cómo me aseguro de no estar haciendo dos?
Estoy tratando de implementar el registro iniciando sesión siempre en el directorio temporal de cualquier sistema operativo en el que esté. Para hacerlo, he escrito la siguiente función.
import logging, tempfile, os, sys
def getlog(logname, filename = 'python.log', directory = None):
'''returns a logger with logname that will print to filename and directoryname.'''
if directory == None:
fd, fname = tempfile.mkstemp()
directory = os.path.dirname(fname)
fullpath = directory + '/' + filename
mylog = logging.getLogger(logname)
hdlr = logging.FileHandler(fullpath)
formatter = logging.Formatter('L:%(name)s M:%(module)s T:%(asctime)s > %(levelname)s: %(message)s')
hdlr.setFormatter(formatter)
mylog.addHandler(hdlr)
mylog.setLevel(logging.INFO)
mylog.info('NEW LOGGER STARTED')
return mylog
if __name__ == '__main__':
log = getlog('testing')
log.info('working?')
log.info('yes, seems to be working')
log2 = getlog('testing')
log2.info('still working?')
Aquí está la salida:
L:testing M:easy_log T:2011-04-11 15:30:14,315 > INFO: NEW LOGGER STARTED
L:testing M:easy_log T:2011-04-11 15:30:14,316 > INFO: working?
L:testing M:easy_log T:2011-04-11 15:30:14,316 > INFO: yes, seems to be working
L:testing M:easy_log T:2011-04-11 15:30:14,316 > INFO: NEW LOGGER STARTED
L:testing M:easy_log T:2011-04-11 15:30:14,316 > INFO: NEW LOGGER STARTED
L:testing M:easy_log T:2011-04-11 15:30:14,316 > INFO: still working?
L:testing M:easy_log T:2011-04-11 15:30:14,316 > INFO: still working?
Como se puede ver, ahora dando salida doble. Sin embargo, el módulo de registro es bastante confuso, y no sé de una forma de averiguar si un registro ya se ha instanciado, o si un objeto de registro ya tiene un controlador. Un poco de ayuda sería apreciada.
Editar: para agregar un poco más de detalle, planeo llamar esto en varios módulos, esencialmente tratando de reemplazar la llamada "logging.getLogger".
FWIW puede acceder a "mylog.handlers" para recorrer la lista de controladores instalados – amirpc