python模塊——logging(日誌管理)

// from : http://blog.sina.com.cn/s/blog_4b5039210100f1wv.html




    一般情況下,一些程序的調試過程中我們會讓它輸出一些信息,特別是一些大型的程序,我們通過這些信息可以瞭解程序的運行情況,python提供了一個日誌模塊logging,它可以把我們想要的信息全部保存到一個日誌文件中,方面我們查看。我們先看一個簡單的例子。

>>> import logging

>>> LOG_FILENAME="C:\Python25\log_test.txt"

>>> logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)

>>> logging.debug("This message should go to the log file")

    然後我們就可以在C盤python25目錄下發現一個名爲log_test.txt的文件,打開裏面的內容爲:   DEBUG:root:This message should go to the log file

    然後我們重複運行最後一句,會發現這個文本文件每次都會多出一行:DEBUG:root:This message should go to the log file

   下面我們看一個更標準的程序:

>>> import logging

>>> logger=logging.getLogger()

>>> handler=logging.FileHandler("Log_test.txt")

>>> logger.addHandler(handler)

>>> logger.setLevel(logging.NOTSET)

>>> logger.error("This is an error message")

>>> logger.info("This is an info message")

>>> logger.critical("This is a critical message")

    日誌文件中會出現三行內容:

This is an error message

This is an info message

This is a critical message

    上面程序的第2行是生成一個日誌對象,裏面的參數時日誌的名字,可以帶,也可以不帶。第3行是生成了一個handler,logging支持很多種Handler,像FileHandler,SocketHandler等待,這裏由於我們要寫文件,所以用了FileHandler,它的參數就是filename,默認當前路徑,當然我們可以自己指定路徑。

    第5行設置日誌信息輸出的級別。Logging提供了多種日誌級別,如NOTSET,DEBUG,INFO,WARNING,ERROR,CRITICAL等,每個級別都對應一個數值,如果我們不自己設置輸出級別,那麼系統會執行缺省級別,值爲30,就warning。Logging也提供了一個方法來查看缺省日誌級別,getLevelName(logger,getEffectiveLevel())。

    python模塊鈥斺攍ogging(日誌管理)

 

    日誌對象對於不同的級別信息提供不同的函數進行輸出,如:info(), error(), debug()等。當寫入日誌時,小於指定級別的信息將被忽略。因此爲了輸出想要的日誌級別一定要設置好此參數。這裏我設爲NOTSET(值爲0),也就是想輸出所有信息。系統默認的日誌級別排序爲,CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET。比如說我們要輸出的信息爲CRITICAL,但是我們的日誌級別爲DEBUG,那麼這個信息將被忽略掉。我們看下面的例子:

import logging

import sys

LEVELS={'debug':logging.DEBUG,

        'info':logging.INFO,

        'warning':logging.WARNING,

        'error':logging.ERROR,

        'critical':logging.CRITICAL}

 

if len(sys.argv)>1:

    level_name=sys.argv[1]

    level=LEVELS.get(level_name,logging.NOTSET)

    logging.basicConfig(level=level)

 

logging.debug("This is a debug message")

logging.info("This is an info message")

logging.warning("This is a warning message")

logging.error("This is an error message")

logging.critical("This is a critical error message")

    運行時候,我們根據給的參數時debug,info等等,來看看輸出情況,就可以知道各個日誌級別的輸出情況了,下面是結果:

 

    python模塊鈥斺攍ogging(日誌管理)

    可以看到過濾進行的很明顯。當我們設置級別最低位debug時,所有的信息都輸出了,當我們設爲最高位critical時候,只有critical輸出了,低於critical的被過濾了。

    Logging是非常有用的,一個程序的健壯性也這個有關,當一個程序包含很多的調試信息時,可以方便我們發現問題,發現錯誤。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章