2010-06-23 17 views
6

¿Cómo se puede cambiar el formato del resultado del módulo logging en Google App Engine?Google App Engine/Python - Cambiar el formato de registro

He intentado, por ejemplo .:

log_format = "* %(asctime)s %(levelname)-8s %(message)s" 
    date_format = "%a, %d %b %Y %H:%M:%S" 

    console = logging.StreamHandler() 
    fr = logging.Formatter(log_format) 
    console.setFormatter(fr) 

    logger = logging.getLogger() 
    logger.addFilter(SuperfluousFilter()) 
    logger.addHandler(console) 

    logger.setLevel(logging.DEBUG) 
    console.setLevel(logging.DEBUG) 

    logging.error("Reconfiguring logging") 

Sin embargo, esto da lugar a la producción de registro duplicado: Uno con el manejador de registro de google/appengine/tools/dev_appserver.py (o en algún lugar del código de Google), y uno de mi nuevo StreamHandler anteriormente. Los anteriores salidas de código:

 
ERROR 2010-06-23 20:46:18,871 initialize.py:38] Reconfiguring logging 
2010-06-23 20:46:18,871 ERROR Reconfiguring logging 

Cuando la línea superior es claramente de dev_appserver.py, el fondo de mi código.

Así que supongo que la pregunta clave es: ¿cómo se puede cambiar el formato de Google App Engine, sin embargo, evitar la salida duplicada?

Gracias por leer.

Brian

Respuesta

10

Aquí es una forma en que puede cambiar el formato de registro sin necesidad de duplicar la producción:

# directly access the default handler and set its format directly 
logging.getLogger().handlers[0].setFormatter(fr) 

Esto es un poco de un truco, porque tienes que acceder directamente a la lista handlers almacenado en la raíz registrador. El problema es que GAE usa automáticamente logging antes de que se ejecute su código, esto crea un controlador predeterminado. Lamentablemente, no veo cómo puede obtener una referencia a este controlador sin acceder directamente a la lista handlers como se indicó anteriormente.

+0

Eso es muy útil. Otra opción que he considerado es ejecutar 'setLevel (logging.CRITICAL)' en el registrador de raíz y crear un nuevo registrador en stderr. –

Cuestiones relacionadas