2010-03-31 10 views
9

Me gustaría registrar el módulo y el nombre de clase de forma predeterminada en los mensajes de registro de mis controladores de solicitudes.¿Cómo cambio el formato predeterminado de los mensajes de registro en el motor de la aplicación python?

La forma habitual de hacer esto parece ser establecer una cadena de formato personalizado llamando al logging.basicConfig, pero esto solo se puede llamar una vez y ya se ha llamado cuando mi código se ejecuta.

Otro método es crear un nuevo registro Handler que se puede pasar a un nuevo registro Formatter, pero esto no parece correcto ya que quiero utilizar el controlador de registro existente que App Engine ha instalado.

¿Cuál es la forma correcta de agregar información adicional a todos los mensajes de registro en Python App Engine, pero de lo contrario, utilice el formato de registro y el receptor existentes?

Respuesta

12

Hice esto leyendo el logging módulo __init__.py. No sé si esto es correcto, pero parece que funciona:

import logging 

logging.basicConfig(level=logging.DEBUG, 
        format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', 
        datefmt='%m-%d %H:%M', 
        ) 

logging.info('Danger Will Robinson!') 
# 03-31 20:00 root   INFO  Danger Will Robinson! 
root = logging.getLogger() 
hdlr = root.handlers[0] 
fmt = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') 
hdlr.setFormatter(fmt) 
logging.info('Danger Will Robinson!') 
# root  : INFO  Danger Will Robinson! 
+0

me di cuenta, que 'root.handlers [0]' no funciona, si 'basicConfig()' no fue llamado antes. ¿Porqué es eso? –

+1

'logging.basicConfig' es una función de conveniencia que configura un controlador de raíz. Si no define un controlador, 'root.handlers' es una lista vacía. Intentando acceder al primer elemento de una lista vacía, p. 'root.handlers [0]', levanta un 'IndexError'. Siempre que utilice el módulo 'logging' debe llamar a' logging.basicConfig' o leer una configuración de un archivo (por ejemplo 'logging.config.fileConfig') o [configurar los controladores usted mismo] (http: // stackoverflow.com/a/4139462/190597). – unutbu

Cuestiones relacionadas