本篇代碼提供者: 青燈教育-自游老師 [環境使用]: Python 3.8 Pycharm [模塊使用]: requests >>> pip install requests re json csv 如果安裝python第三方模塊: win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip i ...
寫了很多年的python日誌都是使用內置的logging模塊來完成的,使用時都需要經過繁瑣的配置。有時候,還可能出現丟失日誌的情況,直到loguru的出現。
loguru真的是十分的簡單的,安裝之後直接導入到python代碼塊中即可直接使用。
1、安裝環境
我們還是按照pip的方式來進行安裝,預設使用清華大學的鏡像站。
pip install loguru -i https://pypi.tuna.tsinghua.edu.cn/simple
安裝完成後就可以直接開始使用了。
2、常規日誌列印
在控制台列印常規日誌時不用添加任何的配置直接使用,使用完成後我們可以來驗證一下列印效果。
from loguru import logger
# 使用debug級別列印一行日誌
logger.debug('I am debug message.')
下麵是我在pycharm上面取下來的日誌效果圖。
可以看一下效果還是令人滿意的,這顏色搭配也比較nice,並且日誌時間精確到秒級。想要看到的日誌信息也基本囊括了。
3、寫入日誌文件
想寫入日誌文件也是比較簡單不用配置,只需要調用add函數添加文件即可。
# 添加日誌文件
logger.add('./message-info.log')
# 列印一行debug日誌
logger.debug('I am debug message.')
此時,不僅控制台會出現一行日誌,並且在message-info.log文件中也寫入了一條dubug日誌信息。
若是在寫入文件時想要指定自己的輸出格式,則可以直接在add函數直接設置即可,同時可以設置輸出到日誌文件中的級別。
# 按照特定的格式將info級別的日誌寫入到日誌文件中
log = logger.add('./info.log',format='{time} | {level} | {message}',level='INFO')
# 這時,多列印一些info級別的日誌
logger.info('I am info message <1>.')
logger.info('I am info message <2>.')
logger.info('I am info message <3>.')
logger.info('I am info message <4>.')
logger.info('I am info message <5>.')
下麵是在pycharm控制台列印的日誌效果
下麵是日誌文件中的展示效果,跟我們設定的日誌格式是一樣的。
4、停止寫入日誌文件
在上述過程中我們添加自定義日誌格式的日誌信息到info.log文件中時特意返回了一個log變數。
這個log其實是返回了一個日誌文件的id,在需要停止向該日誌文件中寫入日誌時,只需要調用remove函數將該文件的日誌id作為參數傳入即可停止嚮日志文件中寫入日誌。
# 停止嚮日志文件中寫入日誌
logger.remove(log)
此時,後面的 日誌文件將不會再寫入日誌文件中了。
5、滾動記錄日誌文件
在實際情況中,我們並不是只會有一個日誌文件。當一個日誌文件超過一定的大小、或是在一個特定的時間周期都可以通過參數的設定來生成新的日誌文件繼續記錄日誌。
# 超過10M生成一個新的日誌文件
logger.add('info.log',rotation='10 MB')
# 每天凌晨一點生成一個新的日誌文件
logger.add('info.log',rotation='01:00')
並且,為了防止日誌文件在長時間的記錄之後占用磁碟,一般還可以設置30天為周期清理日誌文件,這樣就又解決了磁碟爆滿的問題。
# 設置該日誌文件保留的時間為30天
logger.add('info.log',retention='30 days')
通常日誌文件如果按照原始的方式存儲,那麼占用空間還是比較大的。loguru也為我們想到了,就是通過指定文件壓縮的格式之後將日誌文件進行壓縮。
logger.add('info.log',compression='zip')
6、異常日誌捕獲
在實際coding過程中,特別是生產環境,若是出現一些異常信息沒有被寫入到日誌文件中的情況時是特別難受的。在生產環境中,日誌是解決問題的唯一辦法。
loguru提供了註解的方式可以將發生異常的函數信息直接寫入日誌文件中,比如,有這樣一個函數在運行過程中發生了異常。
@logger.catch
def func(param):
return 10 / param
func(0)
上面這個函數在分母是0的時候肯定是會拋出異常的,我們使用註解@logger.catch異常信息就會被寫入。
同時,在日誌文件中也會記錄詳細的異常信息。
【往期精彩】
英語沒學好到底能不能做coder,別再糾結了先學起來...
數據清洗工具flashtext,效率直接提升了幾十倍數!
一個help函數解決了python的所有文檔信息查看...
python 自定義異常/raise關鍵字拋出異常
python 本地音樂播放器製作過程(附完整源碼)
歡迎關註作者公眾號【Python 集中營】,專註於後端編程,每天更新技術乾貨,不定時分享各類資料!