python使用loguru優(yōu)雅記錄日志

python中更優(yōu)雅的記錄日志

前言

在以往我們使用日志冗澈,更多的是使用python自帶的logging模塊钦勘,它可以設(shè)置錯(cuò)誤等級(jí)、輸出方式等亚亲。

但使用方式相對(duì)比較復(fù)雜彻采,想要更好的使用需要如log4net一樣單獨(dú)配置,這在python中感覺(jué)不是很優(yōu)雅捌归。

下面介紹一個(gè)python庫(kù):loguru颊亮。guru是印度語(yǔ)中大師的意思,loguru直譯就是“日志大師”陨溅。

安裝使用

pip install loguru

快速上手

如圖logging一樣终惑,loguru也有定義日志等級(jí)。不同的日志等級(jí)门扇,輸出效果也不一樣(默認(rèn)的等級(jí)由低到高是DEBUG雹有、INFOWARNING臼寄、ERROR霸奕、CRITICAL,也可以自己使用level函數(shù)定義)吉拳。

from loguru  import logger 

logger.debug("That's it, beautiful and simple logging!")

logger.info("this is a info message!")

類(lèi)似logging中的logger.addHandler质帅,loguru統(tǒng)一使用add函數(shù)來(lái)管理格式、文件輸出、過(guò)濾等操作煤惩,它提供了許多參數(shù)來(lái)實(shí)現(xiàn)logger.addHandler中的配置更加簡(jiǎn)單方便嫉嘀。

其中sink是最重要的參數(shù),可以傳入不同的數(shù)據(jù)類(lèi)型魄揉。傳入文件路徑剪侮、文件句柄、sys.stderr洛退、甚至logging模塊的HandlerFileHandler瓣俯、StreamHandler等,這樣就可以快速實(shí)現(xiàn)自定義的Handler配置兵怯。

通過(guò)給remove方法傳遞add方法返回的對(duì)象彩匕, 可以刪除add方法添加的sink,這里的remove并不是刪除test2.log文件媒区,而是停止向該文件輸出日志推掸,需要需要繼續(xù)記錄日志則需要重新add日志文件。

from loguru import logger

obj = logger.add(sink='info.txt', format="{time} {level} {message}", filter="my_module", level="INFO")
logger.info("That's it, beautiful and simple logging!")
logger.remove(obj)

rotation驻仅、retention谅畅、compression進(jìn)行日志窗口、更新噪服、壓縮管理毡泻。

logger.add("file_1.log", rotation="10 MB") # 日志文件的大小是10M,過(guò)大就會(huì)重新生成一個(gè)文件
logger.add("file_2.log", rotation="00:00") # 每天0點(diǎn)創(chuàng)建新日志文件
logger.add("file_3.log", rotation="1 week") # 自動(dòng)更新舊文件
logger.add("file_X.log", retention="3 days") # 每3天自動(dòng)清理舊文件
logger.add("file_Y.log", compression="zip") # zip壓縮文件

支持控制臺(tái)輸出添加顏色粘优, 除了基礎(chǔ)色仇味,loguru甚至允許16進(jìn)制、RGB格式的顏色值和加粗雹顺、下劃線(xiàn)等樣式丹墨。

logger.add(sys.stdout, colorize=True, format="<green>{time}</green> <level>{message}</level>") 

使用裝飾器@logger.catch可以和logging一樣使用logger.exception函數(shù)來(lái)記錄異常信息。

@logger.catch
def my_function(x, y, z):
    # An error? It's caught anyway!
    return 1 / (x + y + z)
    
def func(a, b):
    return a / b

def nested(c):
    try:
        func(5, c)
    except ZeroDivisionError:
        logger.exception("What?!")    
        
nested(0) 

使用exception方法輸出的異常信息包含堆棧信息和當(dāng)前變量的值嬉愧,方便問(wèn)題定位贩挣。

2018-07-17 01:38:43.975 | ERROR    | __main__:nested:10 - What?!
Traceback (most recent call last):

  File "test.py", line 12, in <module>
    nested(0)
    └ <function nested at 0x7f5c755322f0>

> File "test.py", line 8, in nested
    func(5, c)
    │       └ 0
    └ <function func at 0x7f5c79fc2e18>

  File "test.py", line 4, in func
    return a / b
           │   └ 0
           └ 5

ZeroDivisionError: division by zero


使用serialize 可以將日志轉(zhuǎn)換為JSON格式,enqueue 可以保證多線(xiàn)程没酣、多進(jìn)程安全王财。


logger.add("somefile.log", serialize=True) # 序列化為json 
logger.add("somefile.log", enqueue=True) 

修改時(shí)間格式。

logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}") 

參考資料:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末裕便,一起剝皮案震驚了整個(gè)濱河市绒净,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偿衰,老刑警劉巖挂疆,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件改览,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缤言,警方通過(guò)查閱死者的電腦和手機(jī)宝当,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)墨闲,“玉大人,你說(shuō)我怎么就攤上這事郑口≡П蹋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵犬性,是天一觀的道長(zhǎng)瞻离。 經(jīng)常有香客問(wèn)我,道長(zhǎng)乒裆,這世上最難降的妖魔是什么套利? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮鹤耍,結(jié)果婚禮上肉迫,老公的妹妹穿的比我還像新娘。我一直安慰自己稿黄,他們只是感情好喊衫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著杆怕,像睡著了一般族购。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陵珍,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天寝杖,我揣著相機(jī)與錄音,去河邊找鬼互纯。 笑死瑟幕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的留潦。 我是一名探鬼主播收苏,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼愤兵!你這毒婦竟也來(lái)了鹿霸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤秆乳,失蹤者是張志新(化名)和其女友劉穎懦鼠,沒(méi)想到半個(gè)月后钻哩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肛冶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年街氢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睦袖。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡珊肃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出馅笙,到底是詐尸還是另有隱情伦乔,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布董习,位于F島的核電站烈和,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏皿淋。R本人自食惡果不足惜招刹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窝趣。 院中可真熱鬧疯暑,春花似錦、人聲如沸哑舒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)散址。三九已至乖阵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間预麸,已是汗流浹背瞪浸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吏祸,地道東北人对蒲。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像贡翘,于是被迫代替她去往敵國(guó)和親蹈矮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容