標籤:數值 war config handle 方法 功能 失效 formatter ubuntu
Python中有個logging模組可以完成相關資訊的記錄,在debug時用它往往事半功倍1. 記錄層級
日誌一共分成5個等級,從低到高分別是:
- DEBUG
- INFO
- WARNING
- ERROR
- CRITICAL
說明:
- DEBUG:詳細的資訊,通常只出現在診斷問題上
- INFO:確認一切按預期運行
- WARNING:一個跡象表明,一些意想不到的事情發生了,或表明一些問題在不久的將來(例如。磁碟空間低”)。這個軟體還能按預期工作。
- ERROR:更嚴重的問題,軟體沒能執行一些功能
- CRITICAL:一個嚴重的錯誤,這表明程式本身可能無法繼續運行
這5個等級,也分別對應5種打日誌的方法: debug 、info 、warning 、error 、critical。預設的是WARNING,當在WARNING或之上時才被跟蹤。
2. 日誌輸出
有兩種方式記錄跟蹤,一種輸出控制台,另一種是記錄到檔案中,如記錄檔。
2.1、將日誌輸出到控制台
比如,log1.py 如下:
import logging logging.basicConfig(level=logging.WARNING, format=‘%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s‘) # 開始使用log功能logging.info(‘這是 loggging info message‘) logging.debug(‘這是 loggging debug message‘) logging.warning(‘這是 loggging a warning message‘) logging.error(‘這是 an loggging error message‘) logging.critical(‘這是 loggging critical message‘)
運行結果
2018-9-08 20:07:35,725 - log1.py[line:9] - WARNING: 這是 loggging a warning message2018-9-08 20:07:35,725 - log1.py[line:10] - ERROR: 這是 an loggging error message2018-9-08 20:07:35,725 - log1.py[line:11] - CRITICAL: 這是 loggging critical message
說明
通過logging.basicConfig函數對日誌的輸出格式及方式做相關配置,上面代碼設定日誌的輸出等級是WARNING層級,意思是WARNING層級以上的日誌才會輸出。另外還制定了日誌輸出的格式。
注意,只要用過一次log功能再次設定格式時將失效,實際開發中格式肯定不會經常變化,所以剛開始時需要設定好格式
2.2、將日誌輸出到檔案
我們還可以將日誌輸出到檔案,只需要在logging.basicConfig函數中設定好輸出檔案的檔案名稱和寫檔案的模式。
log2.py 如下:
import logging logging.basicConfig(level=logging.WARNING, filename=‘./log.txt‘, filemode=‘w‘, format=‘%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s‘) # use logging logging.info(‘這是 loggging info message‘) logging.debug(‘這是 loggging debug message‘) logging.warning(‘這是 loggging a warning message‘) logging.error(‘這是 an loggging error message‘) logging.critical(‘這是 loggging critical message‘)
運行效果
[email protected]: cat log.txt 2018-9-08 20:10:44,549 - log2.py[line:10] - WARNING: 這是 loggging a warning message2018-9-08 20:10:44,549 - log2.py[line:11] - ERROR: 這是 an loggging error message2018-9-08 20:10:44,549 - log2.py[line:12] - CRITICAL: 這是 loggging critical message
2.3、既要把日誌輸出到控制台, 還要寫入記錄檔
這就需要一個叫作Logger 的對象來幫忙,下面將對他進行詳細介紹,現在這裡先學習怎麼實現把日誌既要輸出到控制台又要輸出到檔案的功能。
import logging # 第一步,建立一個logger logger = logging.getLogger() logger.setLevel(logging.INFO) # Log等級總開關 # 第二步,建立一個handler,用於寫入記錄檔 logfile = ‘./log.txt‘ fh = logging.FileHandler(logfile, mode=‘a‘) # open的開啟模式這裡可以進行參考fh.setLevel(logging.DEBUG) # 輸出到file的log等級的開關 # 第三步,再建立一個handler,用於輸出到控制台 ch = logging.StreamHandler() ch.setLevel(logging.WARNING) # 輸出到console的log等級的開關 # 第四步,定義handler的輸出格式 formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s") fh.setFormatter(formatter) ch.setFormatter(formatter) # 第五步,將logger添加到handler裡面 logger.addHandler(fh) logger.addHandler(ch) # 日誌 logger.debug(‘這是 logger debug message‘) logger.info(‘這是 logger info message‘) logger.warning(‘這是 logger warning message‘) logger.error(‘這是 logger error message‘) logger.critical(‘這是 logger critical message‘)
運行時終端的輸出結果:
2018-9-06 20:14:04,731 - log3.py[line:28] - WARNING: 這是 logger warning message2018-9-06 20:14:04,731 - log3.py[line:29] - ERROR: 這是 logger error message2018-9-06 20:14:04,731 - log3.py[line:30] - CRITICAL: 這是 logger critical message
在log.txt中,有如下資料:
2018-9-06 20:14:04,731 - log3.py[line:27] - INFO: 這是 logger info message2018-9-06 20:14:04,731 - log3.py[line:28] - WARNING: 這是 logger warning message2018-9-06 20:14:04,731 - log3.py[line:29] - ERROR: 這是 logger error message2018-9-06 20:14:04,731 - log3.py[line:30] - CRITICAL: 這是 logger critical message
3、日誌格式說明
logging.basicConfig函數中,可以指定日誌的輸出格式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: 列印日誌資訊
在工作中給的常用格式如下:
format=‘%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s‘
這個格式可以輸出日誌的列印時間,是哪個模組輸出的,輸出的記錄層級是什麼,以及輸入的日誌內容。
python原生的日誌模組