python的日志模塊logging

Python的logging模塊提供了通用的日志系統(tǒng)性锭,支持debug毙替、info玖瘸、warn、error庆猫、critical多種級(jí)別日志,可以方便第三方模塊或者應(yīng)用使用绅络。

1. 日志模塊loging的簡(jiǎn)單案例

#! /usr/bin/env python

#? -*-? coding:utf-8? -*-

import logging

? ? ? ? logging.basicConfig(filename= 'logger.log',? level=logging.ERROR)

? ? ? ? logging.debug('debug message')

? ? ? ? logging.info('info message')

? ? ? ? logging.warn('warn message')

? ? ? ? logging.error('error message')

? ? ? ? logging.critical('critical message')

logging.info等可以在程序的合適地方打印阅悍,在logger.log文件中打印如下:

? ? ? ? ERROR:root:error message

? ? ? ? CRITICAL:root:critical message

因?yàn)橥ㄟ^(guò)level=logging.ERROR設(shè)置日志級(jí)別為ERROR好渠,所以輸出日志級(jí)別大于ERROR的日志信息。

logging日志級(jí)別
2. logging的重要概念
logging樹形結(jié)構(gòu)

1. Logger

Logger是一個(gè)樹形層級(jí)結(jié)構(gòu)节视,在使用debug拳锚、info、warn寻行、error霍掺、critical之前必須創(chuàng)建Logger實(shí)例,即創(chuàng)建一個(gè)記錄器拌蜘,如果沒(méi)有顯式地進(jìn)行創(chuàng)建杆烁,則默認(rèn)創(chuàng)建一個(gè)root logger,應(yīng)用默認(rèn)的日志級(jí)別(WARN)简卧、處理器Handler(StreamHandler將日志輸出在標(biāo)準(zhǔn)輸出設(shè)備上)和格式化器Formatter(默認(rèn)的格式為ERROR:root:error message日志級(jí)別:實(shí)例名稱:日志信息)兔魂。

創(chuàng)建方法:

logger=logging.getLogger(logger_name)

創(chuàng)建Logger實(shí)例后,使用以下方法進(jìn)行日志級(jí)別設(shè)置举娩,增加處理器Handler析校。

? logger.setLevel(logging.ERROR):設(shè)置日志級(jí)別為ERROR,即只有日志級(jí)別大于等于ERROR的日志才會(huì)輸出铜涉。

? logger.addHandler(handler_name):為L(zhǎng)ogger實(shí)例增加一個(gè)處理器智玻。

? logger.removeHandler(handler_name):為L(zhǎng)ogger實(shí)例刪除一個(gè)處理器。

Logger可以包含一個(gè)或多個(gè)Handler和Filter芙代,也就是說(shuō)Logger與Handler或Fitler是一對(duì)多的關(guān)系吊奢;一個(gè)Logger實(shí)例可以新增多個(gè)Handler,一個(gè)Handler可以新增多個(gè)Formatter或多個(gè)Filter纹烹,而且日志級(jí)別將會(huì)繼承页滚。

2. Handler

Handler處理器常用類型有StreamHandler、FileHandler铺呵、NullHandler裹驰,點(diǎn)擊查看參數(shù)使用說(shuō)明

StreamHandler創(chuàng)建方法:? sh = logging.StreamHandler(stream=None)

創(chuàng)建StreamHandler后陪蜻,設(shè)置日志級(jí)別邦马,設(shè)置格式化器Formatter,增加或刪除過(guò)濾器Filter宴卖,使用例子參考網(wǎng)上案例滋将。

? sh.setLevel(logging.WARN):指定日志級(jí)別,低于WARN級(jí)別的日志將被忽略症昏。

? sh.setFormatter(formatter_name):設(shè)置一個(gè)格式化器formatter随闽。

? sh.addFilter(filter_name):增加一個(gè)過(guò)濾器,可以增加多個(gè)肝谭。

? sh.removeFilter(filter_name):刪除一個(gè)過(guò)濾器掘宪。

FileHandler創(chuàng)建方法:

fh = logging.FileHandler(filename, mode='a', encoding=None, delay=False)

NullHandler創(chuàng)建方法:logging.NullHandler

3.Filter

Handler和Logger可以使用Filter來(lái)完成比級(jí)別更復(fù)雜的過(guò)濾蛾扇。Filter基類只允許特定Logger層次以下的事件。例如魏滚,用’A.B’初始化的Filter允許Logger? 'A.B'镀首、 'A.B.C'、 'A. B.C.D'鼠次、 'A.B.D’等記錄的事件更哄,logger'A.BB'、'B.A.B’等就不行腥寇。如果用空字符串來(lái)初始化成翩,所有的事件都接受。

創(chuàng)建方法:filter = logging.Filter(name='')

備注:A.B是啥?看不懂

4.Formatter

Formatter對(duì)象可以設(shè)置日志信息的規(guī)則赦役、結(jié)構(gòu)和內(nèi)容麻敌,以及時(shí)間格式。

創(chuàng)建方法:formatter = logging.Formatter(fmt=None, datefmt=None)

其中掂摔,fmt是消息的格式化字符串术羔,datefmt是日期字符串默認(rèn)使用ISO8601日期格式%Y-%m-%d %H:%M:%S。

3. logging模塊使用方法

1. import? logging

第一次導(dǎo)入logging模塊或使用reload函數(shù)重新導(dǎo)入logging模塊棒呛,logging模塊中的代碼將被執(zhí)行聂示,這個(gè)過(guò)程中將產(chǎn)生logging日志系統(tǒng)的默認(rèn)配置域携。

2. 自定義配置(可選)

logging.basicConfig(filename= 'logger.log', level=logging.ERROR)

logging.config.fileConfig("./logging.conf")

logging.config.dictConfig(config)

logging.config.listen(port=DEFAULT_LOGGING_CONFIG_PORT)

logging模塊支持配置方式:basicConfig簇秒、 dictConfig、fileConfig秀鞭、listen趋观。dictConfig通過(guò)一個(gè)字典配置Logger、Handler锋边、Filter 皱坛、Formatter;fileConfig通過(guò)一個(gè)文件進(jìn)行配置豆巨;listen則監(jiān)聽一個(gè)網(wǎng)絡(luò)端口剩辟,通過(guò)接收網(wǎng)絡(luò)數(shù)據(jù)來(lái)進(jìn)行配置。

basicConfig關(guān)鍵字

常用的format格式如下

常用的format格式

3. 創(chuàng)建一個(gè)Logger對(duì)象實(shí)例

用logging模塊的全局作用域中的getLogger函數(shù)來(lái)得到一個(gè)Logger對(duì)象實(shí)例往扔。

logger=logging.getLogger(logger_name)

4. 用Logger對(duì)象實(shí)例記錄日志

用Logger對(duì)象中的debug贩猎、info、error萍膛、warn吭服、critical等方法記錄日志信息。

logging.info('info message')

4. logging模塊處理流程

1)判斷日志的等級(jí)是否大于Logger對(duì)象的等級(jí)蝗罗,如果大于艇棕,則往下執(zhí)行蝌戒,否則,流程結(jié)束沼琉。

2)產(chǎn)生日志北苟。第一步,判斷是否有異常打瘪,如果有粹淋,則添加異常信息。第二步瑟慈,處理日志記錄方法(如debug桃移、info等)中的占位符,即一般的字符串格式化處理葛碧。

3)使用注冊(cè)到Logger對(duì)象中的Filters進(jìn)行過(guò)濾借杰。如果有多個(gè)過(guò)濾器,則依次過(guò)濾进泼;只要有一個(gè)過(guò)濾器返回假蔗衡,則過(guò)濾結(jié)束,且該日志信息將丟棄乳绕,不再處理绞惦,而處理流程也至此結(jié)束。否則洋措,處理流程往下執(zhí)行济蝉。

4)在當(dāng)前Logger對(duì)象中查找Handler,如果找不到任何Handler菠发,則往上到該Logger對(duì)象的父Logger中查找王滤;如果找到一個(gè)或多個(gè)Handler,則依次用Handler來(lái)處理日志信息滓鸠。但在每個(gè)Handler處理日志信息過(guò)程中雁乡,會(huì)首先判斷日志信息的等級(jí)是否大于該Handler的等級(jí),如果大于糜俗,則往下執(zhí)行(由Logger對(duì)象進(jìn)入Handler對(duì)象中)踱稍,否則,處理流程結(jié)束悠抹。

5)執(zhí)行Handler對(duì)象中的filter方法珠月,該方法會(huì)依次執(zhí)行注冊(cè)到該Handler對(duì)象中的Filter。如果有一個(gè)Filter判斷該日志信息為假锌钮,則此后的所有Filter都不再執(zhí)行桥温,而直接將該日志信息丟棄,處理流程結(jié)束梁丘。

6)使用Formatter類格式化最終的輸出結(jié)果侵浸。注:Formatter同“產(chǎn)生日志”第二步的字符串格式化不同旺韭,它會(huì)添加額外的信息,如日志產(chǎn)生的時(shí)間掏觉、產(chǎn)生日志的源代碼所在的源文件的路徑等区端。

7)真正地輸出日志信息(到網(wǎng)絡(luò)、文件澳腹、終端织盼、郵件等)。至于輸出到哪個(gè)目的地酱塔,由Handler的種類來(lái)決定沥邻。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市羊娃,隨后出現(xiàn)的幾起案子唐全,更是在濱河造成了極大的恐慌,老刑警劉巖蕊玷,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邮利,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡垃帅,警方通過(guò)查閱死者的電腦和手機(jī)延届,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)贸诚,“玉大人方庭,你說(shuō)我怎么就攤上這事∩馄模” “怎么了二鳄?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵赴涵,是天一觀的道長(zhǎng)媒怯。 經(jīng)常有香客問(wèn)我,道長(zhǎng)髓窜,這世上最難降的妖魔是什么扇苞? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮寄纵,結(jié)果婚禮上鳖敷,老公的妹妹穿的比我還像新娘。我一直安慰自己程拭,他們只是感情好定踱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恃鞋,像睡著了一般崖媚。 火紅的嫁衣襯著肌膚如雪亦歉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天畅哑,我揣著相機(jī)與錄音肴楷,去河邊找鬼。 笑死荠呐,一個(gè)胖子當(dāng)著我的面吹牛赛蔫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泥张,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼呵恢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了媚创?” 一聲冷哼從身側(cè)響起瑰剃,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎筝野,沒(méi)想到半個(gè)月后晌姚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歇竟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年挥唠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焕议。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宝磨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盅安,到底是詐尸還是另有隱情唤锉,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布别瞭,位于F島的核電站窿祥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蝙寨。R本人自食惡果不足惜晒衩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望墙歪。 院中可真熱鬧听系,春花似錦、人聲如沸虹菲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至浪漠,卻和暖如春菠赚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背郑藏。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工衡查, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人必盖。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓拌牲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親歌粥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子塌忽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 本文參考自:https://www.cnblogs.com/Nicholas0707/p/9021672.html...
    handsomePeng閱讀 1,395評(píng)論 1 4
  • 本文章是我大概三年前,在上家單位使用 Python 工作時(shí)結(jié)合官方文檔做的整理∈唬現(xiàn)在 Python 官方文檔聽說(shuō)已...
    好吃的野菜閱讀 216,071評(píng)論 14 232
  • (一)土居、日志相關(guān)概念 1、日志的作用 通過(guò)log的分析嬉探,可以方便用戶了解系統(tǒng)或軟件擦耀、應(yīng)用的運(yùn)行情況;如果你的應(yīng)用l...
    Rainy丶Wang閱讀 598評(píng)論 0 0
  • logging介紹Python的logging模塊提供了通用的日志系統(tǒng)涩堤,可以方便第三方模塊或者是應(yīng)用使用眷蜓。這個(gè)模塊...
    modingfa閱讀 6,812評(píng)論 0 2
  • 蜷縮在椅子下的它,渾身雪白胎围,葡萄般大的眼睛溢出了一股靈氣吁系。懶懶的樣子實(shí)在可愛至極。松散的眼神眨著白魂。 五日的陽(yáng)光照到...
    啊啊啊啊啊啊啊那個(gè)黃鸝鳥閱讀 158評(píng)論 0 0