python--logging模組

來源:互聯網
上載者:User

標籤:code   std   process   處理   tor   記憶體耗盡   意義   變化   http   

#申明:本文章參考於http://www.cnblogs.com/dahu-daqing/p/7040764.html

logging模組簡介

# logging模組是python內建的標準模組,主要用於輸出程式的作業記錄# 可以設定輸出日誌的等級,日誌儲存路徑,記錄檔復原等# 比print具有如下優點# 1.可以設定不同的日誌等級,只輸出重要訊息,而不必顯示大量的調試資訊# 2.print將所有資訊都輸出到標準輸出中,嚴重開發人員從標準輸出中查看其它資料,而logging模組可以讓開發人員決定將資訊輸出到什麼地方,以及怎麼輸出

logging模組的基本使用

import logginglogging.basicConfig(    level=logging.INFO, # 這句可要可不要,真正有用的是下面的logger.setLevel(level)    format=‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)logger = logging.getLogger(‘satori‘)logger.setLevel(logging.INFO)   # 這裡設定成infologger.info(‘古明地盆‘)logger.debug(‘芙蘭朵露斯卡雷特‘)logger.warning(‘古明地戀‘)logger.info(‘mmp‘)# 運行程式,控制台輸出‘‘‘2018-06-05 14:12:20,160 - satori - INFO - 古明地盆2018-06-05 14:12:20,160 - satori - WARNING - 古明地戀2018-06-05 14:12:20,160 - satori - INFO - mmp‘‘‘# logging中可以選擇很多訊息層級,如debug,info,warning,error,critical。# 通過賦予logger或者handler不同的層級,開發人員就可以只輸出錯誤資訊到特定的記錄檔案,或者在調試時只記錄調試資訊# 例如我們可以將logger的層級改成debuglogging.basicConfig(    #level=logging.DEBUG,  # 將該句注釋掉    format=‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)logger = logging.getLogger(‘satori‘)logger.setLevel(logging.DEBUG)  # 在這裡設定,發現並不影響程式的運行結果logger.info(‘古明地盆‘)logger.debug(‘芙蘭朵露斯卡雷特‘)logger.warning(‘古明地戀‘)logger.info(‘mmp‘)# 運行程式,輸出結果‘‘‘2018-06-05 14:12:20,160 - satori - INFO - 古明地盆2018-06-05 14:12:20,160 - satori - DEBUG - 芙蘭朵露斯卡雷特2018-06-05 14:12:20,160 - satori - WARNING - 古明地戀2018-06-05 14:12:20,160 - satori - INFO - mmp‘‘‘

將日誌寫入到檔案

# logging.basicConfig函數各參數:# filename:指定記錄檔名;# filemode:和open函數意義相同,指定記錄檔的開啟模式,‘w‘或者‘a‘;# format:指定輸出的格式和內容,format可以輸出很多有用的資訊# 參數# %(levelno)s:列印記錄層級的數值# %(levelname)s:列印記錄層級的名稱# %(pathname)s:列印當前執行程式的路徑,其實就是sys.argv[0]# %(filename)s:列印當前執行程式名# %(funcName)s:列印日誌的當前函數# %(lineno)d:列印日誌的當前行號# %(asctime)s:列印日誌的時間# %(thread)d:列印線程ID# %(threadName)s:列印線程名稱# %(process)d:列印進程ID# %(message)s:列印日誌資訊# datefmt:指定時間格式,同time.strftime();# level:設定記錄層級,預設為logging.WARNNING;# stream:指定將日誌的輸出資料流,可以指定輸出到sys.stderr,sys.stdout或者檔案,預設輸出到sys.stderr,當stream和filename同時指定時,stream被忽略import logging# 設定logging,建立一個filehandler,並對輸出訊息的格式進行設定,將其添加到logger中,然後將日誌寫入到指定的檔案中logger = logging.getLogger(‘古明地盆‘)  # 隨便起什麼名字logger.setLevel(logging.INFO)  # 設定日誌等級# 使用logging.filehandler,說白了類似於open,建立一個log.txt檔案,handler為檔案描述符,就類似於f=open()中的fhandler = logging.FileHandler(‘log.txt‘,mode=‘a‘,encoding=‘utf-8‘)# 為檔案設定日誌等級handler.setLevel(logging.INFO)# 用logging建立輸出的格式formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)# 將格式交給handler,等於handler把格式給吞掉了handler.setFormatter(formatter)# handler作為檔案控制代碼,已經設定好等級,又吞掉了logging設定好的formatter格式。# 此時的handler已經準備就緒,再讓它被logger吞掉,此時的logger已經完善,便可開始列印日誌。logger.addHandler(handler)# 關於設定等級,logger設定一次,handler又設定了一次。# 設定兩次不影響,可以將兩個等級都設定一樣,如果一方等級設定過高,即使另一方等級設定不高,那麼也不會輸出# 可以將等級設定一樣,保持一致logger.info(‘古明地盆‘)logger.debug(‘芙蘭朵露斯卡雷特‘)logger.warning(‘古明地戀‘)logger.info(‘mmp‘)# 執行程式,可以看到有一個txt檔案,檔案內容為‘‘‘2018-06-05 14:23:27,767 - 古明地盆 - INFO - 古明地盆2018-06-05 14:23:27,767 - 古明地盆 - WARNING - 古明地戀2018-06-05 14:23:27,767 - 古明地盆 - INFO - mmp‘‘‘

將日誌同時輸出到檔案和控制台

# logging中添加StreamHandler,可以將日誌輸出到螢幕上import logginglogger = logging.getLogger(‘古明地盆‘)logger.setLevel(level=logging.INFO)handler = logging.FileHandler(‘log1.txt‘,‘a‘,encoding=‘utf-8‘)handler.setLevel(logging.INFO)formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)handler.setFormatter(formatter)# 輸出到控制台console = logging.StreamHandler()  # 由於是輸出到控制台,所不需要參數console.setLevel(logging.INFO)  # 如果不指定格式,那麼只輸出普通的字串console.setFormatter(formatter)  # 指定格式,按照格式輸出logger.addHandler(console)logger.addHandler(handler)logger.info(‘古明地盆‘)logger.debug(‘芙蘭朵露斯卡雷特‘)logger.warning(‘古明地戀‘)logger.info(‘mmp‘)# 輸出結果,可以看到txt檔案和控制台都會輸出如下‘‘‘2018-06-05 19:10:11,995 - 古明地盆 - INFO - 古明地盆2018-06-05 19:10:11,995 - 古明地盆 - WARNING - 古明地戀2018-06-05 19:10:11,995 - 古明地盆 - INFO - mmp‘‘‘# 一些錯誤的等級‘‘‘FATAL:致命錯誤CRITICAL:特別糟糕的事情,如記憶體耗盡、磁碟空間為空白,一般很少使用ERROR:發生錯誤時,如IO操作失敗或者串連問題WARNING:發生很重要的事件,但是並不是錯誤時,如使用者登入密碼錯誤INFO:處理請求或者狀態變化等日常事務DEBUG:調試過程中使用DEBUG等級,如演算法中每個迴圈的中間狀態‘‘‘

 

python--logging模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.