2011-08-04 15 views
7

El logging docs dice que llamar al método logging.disable(lvl) puede "acelerar temporalmente la salida de registro en toda la aplicación", pero tengo problemas para encontrar el "temporalmente". Tomemos, por ejemplo, la siguiente secuencia de comandos:Registro de Python: efectos inversos de disable()

import logging 
logging.disable(logging.CRITICAL) 
logging.warning("test") 
# Something here 
logging.warning("test") 

Hasta ahora, no he sido capaz de encontrar el Something here que volver a activar el sistema de registro en su conjunto y permitir que el segundo warning para pasar. ¿Hay un reverso al disable()?

Respuesta

11
logging.disable(logging.NOTSET)  
+0

fantástico, y - en retrospectiva - bastante obvio :) Gracias! – Tim

+4

No es tan obvio como 'logging.enable()' hubiera sido ... – nmichaels

+0

¿Alguna forma de contactar al equipo de documentación de python? Algo obviamente falta allí. –

0

Sobre la base de la respuesta por @unutbu, he creado un gestor de contexto:

import logging 
log = logging.getLogger(__name__) 

class SuppressLogging: 
    """ 
    Context handler class that suppresses logging for some controlled code. 
    """ 

    def __init__(self, loglevel): 
     logging.disable(loglevel) 
     return 

    def __enter__(self): 
     return 

    def __exit__(self, exctype, excval, exctraceback): 
     logging.disable(logging.NOTSET) 
     return False 

if __name__ == "__main__": 
    logging.basicConfig(level=logging.INFO) 
    log.info("log this") 
    with SuppressLogging(logging.WARNING): 
     log.info("don't log this") 
     log.warning("don't log this warning") 
     log.error("log this error while up to WARNING suppressed") 
    log.info("log this again")