轉(zhuǎn)載自:知乎:使用Python中l(wèi)ogging模塊错维,拋棄print吧
logging模塊作用及示例
在實際應用中纸俭,日志文件十分重要,通過日志文件任内,我們知道程序運行的細節(jié);同時融柬,當程序出問題時死嗦,我們也可以通過日志快速定位問題所在。我們也需要輸出一些中間信息粒氧,如運行時間越除、變量值等,以便于定位問題和調(diào)試外盯。
在以往我們習慣于用print()函數(shù)輸出信息摘盆,如:
print('Start reading database')
records = model.read_recrods()
print('records', records)
print('Updating record ...')
model.update_records(records)
print('done')
使用print()的缺點很明顯,當正式運行程序時饱苟,需要將這些print()語句注釋或刪除孩擂,效率很低。
為解決這個問題箱熬,可以使用logging
模塊:
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info('Start reading database')
# read database here
records = {'john': 55, 'tom': 66}
logger.debug('Records: %s', records)
logger.info('Updating records ...')
# update records here
logger.info('Finish updating records')
運行結(jié)果如下:
INFO:__main__:Start reading database
INFO:__main__:Updating records ...
INFO:__main__:Finish updating records
logging
模塊和print()的區(qū)別在于:logging
模塊可以通過改變level
來控制一些語句是否輸出类垦。在上邊代碼中level
被設(shè)置為INFO
級別狈邑,下邊改為DEBUG
級別:
logging.basicConfig(level=logging.DEBUG)
得到的輸出為:
INFO:__main__:Start reading database
DEBUG:__main__:Records: {'john': 55, 'tom': 66}
INFO:__main__:Updating records ...
INFO:__main__:Finish updating records
logging模塊介紹
基本介紹
- logging 模塊是python自帶的一個包,因此在使用的時候蚤认,不必安裝米苹,只需要import即可。
- logging模塊有5個level烙懦,分別是:debug,主要是查看一下程序運行的信息赤炒,一般是調(diào)試程序要看的信息氯析;info,是我們看程序是否如預料執(zhí)行的信息莺褒;warn掩缓,意料之外的,但是不影響程序運行遵岩;error和critical就是一些比較嚴重的問題你辣,會影響程序運行。
默認level是warn尘执,這個時候debug級別和info級別就不會被輸出到日志里了舍哄。如果想要看到這些信息,就需要進行一些設(shè)置誊锭。
基礎(chǔ)設(shè)置
主要調(diào)用logging.basicConfig(***kwargs*)
這個函數(shù)對logging進行設(shè)置表悬。函數(shù)常用的參數(shù)如下:
- level:主要調(diào)整logging的級別
- filename:輸出日志的路徑
- filemode:直接寫入還是追加寫入
- format:輸出的格式
通過調(diào)整format
,可以輸出我們想要的格式丧靡,比如:
import logging
logging.basicConfig(format='%(asctime)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S')
logging.warning('Admin logged out')
輸出結(jié)果為:
12-Jul-18 20:53:19 - Admin logged out
這就是在format參數(shù)中設(shè)置了時間的蟆沫,所以得到了時間。我們可以輸出多種想要的信息温治,主要參考這里饭庞。
總結(jié)
除非是自己寫的小腳本中可以使用print()函數(shù),其他情況下最好還是用logging模塊來打印信息熬荆,輸出日志舟山。