python中利用logging包進行日志記錄時的logging.level設置選擇


之前在用python自帶的logging包進行日志輸出的時候發現有些logging語句沒有輸出,感到比較奇怪就去查了一下logging文檔。然后發現其在設置和引用時的logging level會影響最后的輸出。logging包默認對輸出分成了6個等級:

這里的分值就代表了相應關鍵字出現的等級高低,NOTSET最低,CRITICAL最高。高等級的語句會覆蓋低等級的語句。
一般我們用logging的時候會先在主程序配置一個logging類的格式,然后在子程序中直接引用即可(舉個例子)。如果我們在設置默認格式的時候設置的等級比之后調用是的要高,那么調用的logging語句將不會輸出;反之,輸出時默認等級也會被調用語句的等級覆蓋。
下面用一個簡單的程序說明下 (更具體例子可查閱官方文檔):

import logging
import sys

def test_log_level():
    # set default logging configuration
    logger = logging.getLogger()    # initialize logging class
    logger.setLevel(logging.DEBUG)  # default log level
    format = logging.Formatter("%(asctime)s - %(message)s")    # output format 
    sh = logging.StreamHandler(stream=sys.stdout)    # output to standard output
    sh.setFormatter(format)
    logger.addHandler(sh)
    
    # use logging to generate log ouput 
    logger.info("this is info")
    logger.debug("this is debug")
    logger.warning("this is warning")
    logging.error("this is error")
    logger.critical("this is critical")

test_log_level()

輸出

2016-09-13 18:53:05,966 INFO - this is info
2016-09-13 18:53:05,966 DEBUG - this is debug
2016-09-13 18:53:05,966 WARNING - this is warning
2016-09-13 18:53:05,967 ERROR - this is error
2016-09-13 18:53:05,967 CRITICAL - this is critical

如果我們把logger的等級調高,比如到INFO

logger.setLevel(logging.INFO)

那么輸出結果將是:

2016-09-13 18:52:37,492 INFO - this is info
2016-09-13 18:52:37,492 WARNING - this is warning
2016-09-13 18:52:37,492 ERROR - this is error
2016-09-13 18:52:37,492 CRITICAL - this is critical

logging.debug的調用沒有產生日志,也就是上面說的調用等級沒有超過默認等級將不會有輸出;而其他的調用等級超過默認等級的時候,日志記錄的就是調用等級。

總結:因為一般日志系統中調用最多的就是logging.INFO,所以一般默認的等級設置不會太高選擇DEBUG或INFO即可。通過調用logging的不同等級可以方便我們快速查閱標簽從而找出bug。所以個人覺得這個logging模塊還是需要好好看下文檔理解掌握下的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM