2011-08-04 30 views
7

logging docs nói rằng gọi phương thức logging.disable(lvl) có thể "tạm thời giảm tốc độ ghi nhật ký trên toàn bộ ứng dụng", nhưng tôi gặp khó khăn khi tìm "tạm thời". Lấy ví dụ, đoạn mã sau:Ghi nhật ký Python: hiệu ứng đảo ngược của vô hiệu hóa()

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

Cho đến nay, tôi đã không thể tìm thấy Something here mà sẽ kích hoạt lại hệ thống đăng nhập như một toàn thể và cho phép thứ hai warning để có được thông qua. Có ngược lại disable() không?

Trả lời

11
logging.disable(logging.NOTSET)  
+0

Fantastic, và - khi nhìn lại - khá rõ ràng :) Cảm ơn! – Tim

+4

Không rõ ràng như 'logging.enable()' sẽ là ... – nmichaels

+0

Bất kỳ cách nào để liên hệ với nhóm tài liệu python? Một cái gì đó rõ ràng là mất tích ở đó. –

0

Dựa trên câu trả lời của @unutbu, tôi tạo ra một người quản lý bối cảnh:

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") 
Các vấn đề liên quan