1. 程式人生 > >python--logging模塊

python--logging模塊

.html 輸出 相同 數值 basic size ole logger 錯誤信息

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

logging模塊簡介

# logging模塊是python內置的標準模塊,主要用於輸出程序的運行日誌
# 可以設置輸出日誌的等級,日誌保存路徑,日誌文件回滾等
# 比print具有如下優點
# 1.可以設置不同的日誌等級,只輸出重要信息,而不必顯示大量的調試信息
# 2.print將所有信息都輸出到標準輸出中,嚴重開發者從標準輸出中查看其它數據,而logging模塊可以讓開發者決定將信息輸出到什麽地方,以及怎麽輸出

logging模塊的基本使用

import logging
logging.basicConfig(
    level
=logging.INFO, # 這句可要可不要,真正有用的是下面的logger.setLevel(level) format=%(asctime)s - %(name)s - %(levelname)s - %(message)s ) logger = logging.getLogger(satori) logger.setLevel(logging.INFO) # 這裏設置成info 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 - WARNING - 古明地戀 2018-06-05 14:12:20,160 - satori - INFO - mmp ‘‘‘ # logging中可以選擇很多消息級別,如debug,info,warning,error,critical。 # 通過賦予logger或者handler不同的級別,開發者就可以只輸出錯誤信息到特定的記錄文件,或者在調試時只記錄調試信息 # 例如我們可以將logger的級別改成debug logging.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()中的f
handler = 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 logging
logger = 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模塊