欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 程序員必須掌握的日志記錄

 更新時(shí)間:2020年08月17日 10:14:58   作者:Rocky0429  
這篇文章主要介紹了Python 日志的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下

寫(xiě)在之前

在我們的現(xiàn)實(shí)生活中,「日志記錄」其實(shí)是一件非常重要的事情,比如銀行的轉(zhuǎn)賬記錄,汽車(chē)的行車(chē)記錄儀記錄行駛過(guò)程中的一切,如果出現(xiàn)了什么問(wèn)題,我們可以通過(guò)「日志記錄」來(lái)搞清楚到底發(fā)生了什么事情。

除了在生活中,在日常的系統(tǒng)開(kāi)發(fā)以及調(diào)試等過(guò)程中,記錄日志同樣是一件很重要的事情。很多編程初學(xué)者并沒(méi)有「記錄日志」的習(xí)慣,認(rèn)為記錄日志是一件可有可無(wú)的事情,出現(xiàn)問(wèn)題的時(shí)候只要使用 print 函數(shù)打印一下程序的中間結(jié)果即可,真是 too young too naive。只是 print 的話對(duì)于簡(jiǎn)單的腳本程序來(lái)說(shuō)或許可行,可是到了碰到復(fù)雜的系統(tǒng),你如果還是只用 print 這種方式的話,你會(huì)看到大量的消息,看到吐也不一定能找到其中有用的消息。

「日志」是一個(gè)系統(tǒng)的重要組成部分,用來(lái)記錄用戶操作、系統(tǒng)運(yùn)行狀態(tài)和錯(cuò)誤信息,它的好壞直接影響到系統(tǒng)出現(xiàn)問(wèn)題時(shí)定位的速度,有日志記錄,我們可以在服務(wù)崩潰的時(shí)候很快的通過(guò)查看日志來(lái)發(fā)現(xiàn)問(wèn)題出現(xiàn)的地方,同樣也可以通過(guò)對(duì)日志的觀察和分析,提前發(fā)現(xiàn)系統(tǒng)可能存在的風(fēng)險(xiǎn)。

Python 的標(biāo)準(zhǔn)日志模塊

上面我們說(shuō)了「日志」是如此的重要,作為無(wú)所不能的 Python 當(dāng)然也有日志相關(guān)的功能,Python 標(biāo)準(zhǔn)庫(kù)中提供了 logging 模塊供我們使用。在最簡(jiǎn)單的使用中,默認(rèn)情況下 logging 將日志打印到屏幕終端,我們可以直接導(dǎo)入 logging 模塊,然后調(diào)用 debug,info,warn,error 和 critical 等函數(shù)來(lái)記錄日志,默認(rèn)日志的級(jí)別為 warning,級(jí)別比 warning 高的日志才會(huì)被顯示(critical > error > warning > info > debug),「級(jí)別」是一個(gè)邏輯上的概念,用來(lái)區(qū)分日志的重要程度。

import logging

logging.debug('debug message')
logging.info("info message")
logging.warn('warn message')
logging.error("error message")
logging.critical('critical message')

上述代碼的執(zhí)行結(jié)果如下所示:

WARNING:root:warn message
ERROR:root:error message
CRITICAL:root:critical message

我在上面說(shuō)過(guò),用 print 的話會(huì)產(chǎn)生大量的信息,從而很難從中找到真正有用的信息。而 logging 中將日志分成不同的級(jí)別以后,我們?cè)诖蠖鄶?shù)時(shí)間只保存級(jí)別比較高的日志信息,從而提高了日志的性能和分析速度,這樣我們就可以很快速的從一個(gè)很大的日志文件里找到錯(cuò)誤的信息。

配置日志格式

我們?cè)谟?logging 來(lái)記錄日志之前,先來(lái)進(jìn)行一些簡(jiǎn)單的配置:

import logging

logging.basicConfig(filename= 'test.log', level= logging.INFO)

logging.debug('debug message')
logging.info("info message")
logging.warn('warn message')
logging.error("error message")
logging.critical('critical message')

上面的例子中,我是用 basicConfig 對(duì)日志進(jìn)行了簡(jiǎn)單的配置,其實(shí)我們還可以進(jìn)行更為復(fù)雜些的配置,在此之前,我們先來(lái)了解一下 logging 中的幾個(gè)概念:

  • Logger:日志記錄器,是應(yīng)用程序中可以直接使用的接口。
  • Handler:日志處理器,用以表明將日志保存到什么地方以及保存多久。
  • Formatter:格式化,用以配置日志的輸出格式。

上述三者的關(guān)系是:一個(gè) Logger 使用一個(gè) Handler,一個(gè) Handler 使用一個(gè) Formatter。那么概念我們知道了,該如何去使用它們呢?我們的 logging 中有很多種方式來(lái)配置文件,簡(jiǎn)單的就用上面所說(shuō)的 basicConfig,對(duì)于比較復(fù)雜的我們可以將日志的配置保存在一個(gè)配置文件中,然后在主程序中使用 fileConfig 讀取配置文件。

基本的知識(shí)我們知道了,下面我們來(lái)做一個(gè)小的題目:日志文件保存所有 debug 及其以上級(jí)別的日志,每條日志中要有打印日志的時(shí)間,日志的級(jí)別和日志的內(nèi)容。請(qǐng)先自己嘗試著思考一下,如果你已經(jīng)思考完畢請(qǐng)繼續(xù)向下看:

import logging

logging.basicConfig(
  level= logging.DEBUG,
  format = '%(asctime)s : %(levelname)s : %(message)s',
  filename= "test.log"
)

logging.debug('debug message')
logging.info("info message")
logging.warn('warn message')
logging.error("error message")
logging.critical('critical message')

上述代碼的一次運(yùn)行結(jié)果如下:

2018-10-19 22:50:35,225 : DEBUG : debug message
2018-10-19 22:50:35,225 : INFO : info message
2018-10-19 22:50:35,225 : WARNING : warn message
2018-10-19 22:50:35,225 : ERROR : error message
2018-10-19 22:50:35,225 : CRITICAL : critical message

我剛剛在上面說(shuō)過(guò),對(duì)于比較復(fù)雜的我們可以將日志的配置保存在一個(gè)配置文件中,然后在主程序中使用 fileConfig 讀取配置文件。下面我們就來(lái)看一個(gè)典型的日志配置文件(配置文件名為 logging.conf):

[loggers]
keys = root

[handlers]
keys = logfile

[formatters]
keys = generic

[logger_root]
handlers = logfile

[handler_logfile]
class = handlers.TimedRotatingFileHandler
args = ('test.log', 'midnight', 1, 10)
level = DEBUG
formatter = generic

[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s] %(message)s

在上述的日志配置文件中,首先我們?cè)?[loggers] 中聲明了一個(gè)叫做 root 的日志記錄器(logger),在 [handlers] 中聲明了一個(gè)叫 logfile 的日志處理器(handler),在 [formatters] 中聲明了一個(gè)名為 generic 的格式化(formatter)。之后在 [logger_root] 中定義 root 這個(gè)日志處理器(logger) 所使用的日志處理器(handler) 是哪個(gè),在 [handler_logfile] 中定義了日志處理器(handler) 輸出日志的方式、日志文件的切換時(shí)間等。最后在 [formatter_generic] 中定義了日志的格式,包括日志的產(chǎn)生時(shí)間,級(jí)別、文件名以及行號(hào)等信息。

有了上述的配置文件以后,我們就可以在主代碼中使用 logging.conf 模塊的 fileConfig 函數(shù)加載日志配置:

import logging
import logging.config

logging.config.fileConfig('logging.conf')

logging.debug('debug message')
logging.info("info message")
logging.warn('warn message')
logging.error("error message")
logging.critical('critical message')

上述代碼的運(yùn)行一次的結(jié)果如下所示:

2018-10-19 23:00:02,809 WARNI [root:8] warn message
2018-10-19 23:00:02,809 ERROR [root:9] error message
2018-10-19 23:00:02,809 CRITI [root:10] critical message

寫(xiě)在之后

正如標(biāo)題中所說(shuō)的那樣,我認(rèn)為「日志記錄」是每個(gè) Python 程序員必須要知道且學(xué)會(huì)的東西,也是每個(gè)程序員必須具備的意識(shí)。如果你之前沒(méi)有使用過(guò)日志亦或者說(shuō)不知道該怎么去使用日志記錄,這篇文章我相信會(huì)給你帶來(lái)一些幫助。

Python 的日志庫(kù)設(shè)計(jì)之好,用起來(lái)之靈活,可以說(shuō)是 Python 標(biāo)準(zhǔn)庫(kù)中相當(dāng)優(yōu)秀的存在。當(dāng)然上面我們所說(shuō)的只是 Python 日志庫(kù)中很少的一部分,更多的操作和內(nèi)容還需要你在今后的學(xué)習(xí)和實(shí)踐中自己去發(fā)掘和運(yùn)用。

The end。

以上就是Python 程序員必須掌握的日志記錄的詳細(xì)內(nèi)容,更多關(guān)于python 日志的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論