『居善地』接口測(cè)試 — 22.Python日志logging模塊介紹

1竟趾、日志的作用

從事與軟件相關(guān)工作的人憔购,應(yīng)該都聽(tīng)過(guò)“日志”一詞。

日志就是跟蹤軟件運(yùn)行時(shí)事件的方法岔帽,為了能夠在程序運(yùn)行過(guò)程中記錄錯(cuò)誤玫鸟。

通過(guò)日志記錄程序的運(yùn)行,方便我們查詢(xún)信息犀勒,以便追蹤問(wèn)題屎飘、進(jìn)行維護(hù)和調(diào)試妥曲、還是數(shù)據(jù)分析。

并且各編程語(yǔ)言都形成了各自的日志體系和相應(yīng)的框架钦购。

總結(jié):日志的作用

  • 程序調(diào)試檐盟。

  • 了解軟件程序運(yùn)行情況,是否正常押桃。

  • 軟件程序運(yùn)行故障分析與問(wèn)題定位葵萎。

2、為什么需要寫(xiě)日志

首先我們要樹(shù)立一個(gè)觀點(diǎn)唱凯,那就是“不是為了記錄日志而記錄日志陌宿,日志也不是隨意記的”。要實(shí)現(xiàn)能夠只通過(guò)日志文件還原整個(gè)程序執(zhí)行的過(guò)程波丰,達(dá)到能透明地看到程序里執(zhí)行情況壳坪,每個(gè)線(xiàn)程每個(gè)過(guò)程到底執(zhí)行結(jié)果的目的。日志就像飛機(jī)的黑匣子一樣掰烟,應(yīng)當(dāng)能夠復(fù)原異常的整個(gè)現(xiàn)場(chǎng)乃至細(xì)節(jié)爽蝴。

在項(xiàng)目中,日志這個(gè)功能非常重要纫骑,我們要重視起來(lái)蝎亚。

  • 我們要知道日志能用來(lái)干什么,能干到什么程度先馆。

  • 要知道日志框架的使用方法和配置方式发框。

  • 要知道什么地方該進(jìn)行日志記錄。

  • 要知道進(jìn)行什么級(jí)別的日志記錄煤墙。

  • 日志中該寫(xiě)些什么內(nèi)容梅惯。

3、Python中的日志處理

(1)logging模塊介紹

在Python中仿野,使用logging模塊來(lái)進(jìn)行日志的處理铣减。

logging是python的內(nèi)置模塊,主要用于將日志信息進(jìn)行格式化內(nèi)容輸出脚作,可將格式化內(nèi)容輸出到文件葫哗,也可輸出到屏幕。

我們?cè)陂_(kāi)發(fā)過(guò)程中球涛,常用print()函數(shù)來(lái)進(jìn)行調(diào)試劣针,但是在實(shí)際應(yīng)用的部署時(shí),我們要將日志信息輸出到文件中亿扁,方便后續(xù)查找以及備份捺典。

在我們使用日志管理時(shí),我們也可以將日志格式化成Json對(duì)象轉(zhuǎn)存到ELK中方便圖形化查看及管理魏烫。

(2)logging模塊的四大組件

logging模塊將日志系統(tǒng)從高向低依次定義了四個(gè)類(lèi)辣苏,分別是logger(日志器)、handler(處理器)哄褒、filter(過(guò)濾器)和formatter(格式器)稀蟋。其中由日志器生成的實(shí)例將接管原本日志記錄函數(shù)logging.log的功能。

組件 說(shuō)明
logger 提供應(yīng)用程序代碼直接使用的接口呐赡。
handler 用于將日志記錄發(fā)送到指定的目的位置骡尽。
formatter 用于控制日志信息的最終輸出格式县爬,格式化輸出。
filter 提供更細(xì)粒度的日志過(guò)濾功能,用于決定哪些日志記錄將會(huì)被輸出(其它的日志記錄將會(huì)被忽略)确憨。

說(shuō)明:

  • Logger

    用于記錄日志的對(duì)象。

    工作流程:

    1借尿、判斷需要記錄的日志level是否滿(mǎn)足當(dāng)前l(fā)ogger對(duì)象設(shè)置的level等級(jí)要求民鼓。

    比如logger設(shè)置的level是Info,記錄時(shí)使用的logger.debug霹琼,那么就會(huì)不滿(mǎn)足务傲,所以不會(huì)記錄日志。

    2枣申、查看logger的filter過(guò)濾器是否滿(mǎn)足售葡。

    3、filter通過(guò)之后忠藤,交給logger的handler來(lái)記錄日志挟伙,一個(gè)logger是可以設(shè)置多個(gè)handler。

    注意:在整個(gè)應(yīng)用中可以有多個(gè)logger模孩,使用logging.getLogger時(shí)通過(guò)指定name來(lái)獲取對(duì)象尖阔,實(shí)際logging中還存在一個(gè)Manager類(lèi),由Manager來(lái)進(jìn)行多l(xiāng)ogger的單例模式管理榨咐。

  • Handler

    用于記錄日志到具體的文件诺祸、輸出流或其他的管道。

    功能:

    1祭芦、查看記錄日志是否滿(mǎn)足過(guò)濾器筷笨。

    2、滿(mǎn)足過(guò)濾器龟劲,按照設(shè)置的Formatter生成字符串胃夏。

    3、將內(nèi)容寫(xiě)入到具體的文件或者輸出流

    不同的Handler可能有不同的處理昌跌,但是底層原理還是做這三件事情仰禀。

(3)logging日志級(jí)別

我們先來(lái)思考下下面的兩個(gè)問(wèn)題:

  • 作為開(kāi)發(fā)人員,在開(kāi)發(fā)一個(gè)應(yīng)用程序時(shí)需要什么日志信息蚕愤?在應(yīng)用程序正式上線(xiàn)后需要什么日志信息答恶?

  • 作為應(yīng)用運(yùn)維人員饺蚊,在部署開(kāi)發(fā)環(huán)境時(shí)需要什么日志信息?在部署生產(chǎn)環(huán)境時(shí)需要什么日志信息悬嗓?

在軟件開(kāi)發(fā)階段或部署開(kāi)發(fā)環(huán)境時(shí)污呼,為了盡可能詳細(xì)的查看應(yīng)用程序的運(yùn)行狀態(tài)來(lái)保證上線(xiàn)后的穩(wěn)定性,我們可能需要把該應(yīng)用程序所有的運(yùn)行日志全部記錄下來(lái)進(jìn)行分析包竹,這是非常耗費(fèi)機(jī)器性能的燕酷。

當(dāng)應(yīng)用程序正式發(fā)布或在生產(chǎn)環(huán)境部署應(yīng)用程序時(shí),我們通常只需要記錄應(yīng)用程序的異常信息周瞎、錯(cuò)誤信息等苗缩,這樣既可以減小服務(wù)器的I/O壓力,也可以避免我們?cè)谂挪楣收蠒r(shí)被淹沒(méi)在日志的海洋里声诸。

那么怎樣才能在不改動(dòng)應(yīng)用程序代碼的情況下酱讶,根據(jù)事件的重要性或者稱(chēng)之為等級(jí),實(shí)現(xiàn)在不同的環(huán)境中彼乌,記錄不同詳細(xì)程度的日志呢浴麻?

這就是日志等級(jí)的作用了,我們通過(guò)配置文件指定我們需要的日志等級(jí)就可以了囤攀。

級(jí)別 何時(shí)使用
DEBUG 細(xì)節(jié)信息软免,僅當(dāng)診斷問(wèn)題時(shí)適用。
INFO 確認(rèn)程序按預(yù)期運(yùn)行焚挠。
WARNING 表明發(fā)生了一些意外膏萧,或者不久的將來(lái)會(huì)發(fā)生問(wèn)題(如‘磁盤(pán)滿(mǎn)了’)。但程序還是在正常工作蝌衔。
ERROR 由于嚴(yán)重的問(wèn)題榛泛,程序的某些功能已經(jīng)不能正常執(zhí)行。
CRITICAL 嚴(yán)重的錯(cuò)誤噩斟,表明程序已不能繼續(xù)運(yùn)行了曹锨。

說(shuō)明:

  • 上面列表中的日志等級(jí)是從上到下依次升高的,即:DEBUG<INFO<WARNING<ERROR<CRITICAL剃允。而日志的信息量是依次減少的沛简。

  • 當(dāng)為某個(gè)應(yīng)用程序指定一個(gè)日志級(jí)別后,應(yīng)用程序會(huì)記錄所有日志級(jí)別大于或等于指定日志級(jí)別的日志信息斥废,而不是僅僅記錄指定級(jí)別的日志信息椒楣,小于該等級(jí)的日志記錄將會(huì)被丟棄。

總結(jié):

  • 開(kāi)發(fā)應(yīng)用程序時(shí)或部署開(kāi)發(fā)環(huán)境時(shí)牡肉,可以使用DEBUG或INFO級(jí)別的日志獲取盡可能詳細(xì)的日志信息捧灰,可以方便進(jìn)行開(kāi)發(fā)或部署調(diào)試。
  • 應(yīng)用上線(xiàn)或部署生產(chǎn)環(huán)境時(shí)统锤,應(yīng)用使用WARNING或ERROR或CRITICAL級(jí)別的日志毛俏,來(lái)降低機(jī)器的I/O壓力和提高獲取錯(cuò)誤日志信息的效率炭庙。
  • 日志級(jí)別的指定通常都是在應(yīng)用程序的配置文件中進(jìn)行指定的。
  • 不同的應(yīng)用程序所定義的日志等級(jí)會(huì)有所差別煌寇,根據(jù)實(shí)際需求來(lái)決定焕蹄。

參考:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市唧席,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嘲驾,老刑警劉巖淌哟,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辽故,居然都是意外死亡徒仓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)誊垢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)掉弛,“玉大人,你說(shuō)我怎么就攤上這事喂走⊙甓觯” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵芋肠,是天一觀的道長(zhǎng)乎芳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)帖池,這世上最難降的妖魔是什么奈惑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮睡汹,結(jié)果婚禮上肴甸,老公的妹妹穿的比我還像新娘。我一直安慰自己囚巴,他們只是感情好原在,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著彤叉,像睡著了一般晤斩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姆坚,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天澳泵,我揣著相機(jī)與錄音,去河邊找鬼兼呵。 笑死兔辅,一個(gè)胖子當(dāng)著我的面吹牛腊敲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播维苔,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼碰辅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了介时?” 一聲冷哼從身側(cè)響起没宾,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沸柔,沒(méi)想到半個(gè)月后循衰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡褐澎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年会钝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片工三。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迁酸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出俭正,到底是詐尸還是另有隱情奸鬓,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布掸读,位于F島的核電站全蝶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏寺枉。R本人自食惡果不足惜抑淫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姥闪。 院中可真熱鬧始苇,春花似錦、人聲如沸筐喳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)避归。三九已至荣月,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間梳毙,已是汗流浹背哺窄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萌业。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓坷襟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親生年。 傳聞我的和親對(duì)象是個(gè)殘疾皇子婴程,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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