2011-08-04 19 views
7

logging docs, logging.disable(lvl) yöntemini çağırmanın "tüm uygulama boyunca günlüğe kaydetme çıktısını geçici olarak atlatabileceğini" söylüyor ancak "geçici olarak" bulmakta zorlanıyorum. Örneğin, aşağıdaki komut dosyasını atın:Python günlüğü: disable() 'ın ters etkileri()

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

Şimdiye kadar, bir bütün olarak kayıt sistemini yeniden etkinleştirmek ve üstesinden gelmeye warning ikinci sağlayacak Something here bulmak mümkün olmamıştır. disable()'un tersi var mı? @unutbu tarafından cevap dayanarak

cevap

11
logging.disable(logging.NOTSET)  
+0

Fantastik ve - geçmişe bakıldığında - çok açık :) Teşekkürler! – Tim

+4

“logging.enable()” kadar açık değil… – nmichaels

+0

Python dokümantasyon ekibiyle iletişim kurmanın herhangi bir yolu var mı? Belli ki bir şey eksik. –

0

, ben bir bağlam yöneticisi yarattı:

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