2010-06-23 12 views
6

Come si può cambiare la formattazione dell'output dal modulo logging in Google App Engine?Google App Engine/Python - Modifica la formattazione di registrazione

ho provato, per es .:

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") 

Tuttavia questo si traduce in output della registrazione duplicato: Uno con il gestore di registrazione da google/appengine/tools/dev_appserver.py (o da qualche parte nel codice di Google), e uno dal mio nuovo StreamHandler sopra. Le uscite di codice di cui sopra:

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

Dove la linea superiore è chiaramente dalla dev_appserver.py, la linea di fondo dal mio codice.

Quindi immagino che la domanda del corollario sia: come può cambiare la formattazione di Google App Engine, ma evitare l'output duplicato?

Grazie per la lettura.

Brian

risposta

10

Ecco un modo è possibile modificare il formato di registrazione senza duplicare uscita:

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

Questo è un po 'di un hack perché si deve accedere direttamente alla lista handlers memorizzato nella radice logger. Il problema è che GAE utilizza automaticamente logging prima che il codice venga mai eseguito - questo crea un gestore predefinito. Sfortunatamente, non vedo come si possa ottenere un riferimento a questo gestore senza accedere direttamente all'elenco handlers come sopra.

+0

Questo è molto utile. Un'altra opzione che ho considerato di eseguire 'setLevel (logging.CRITICAL)' nel logger root e creare un nuovo logger su stderr. –

Problemi correlati