pyhon的一個(gè)函數(shù)在執(zhí)行I/O參數(shù)比如文件讀寫,socket正在等待數(shù)據(jù)時(shí)是不能干其他事情的,包括打日志。如果想讓一個(gè)文件準(zhǔn)備好讀寫了或者一個(gè)socket有數(shù)據(jù)可以直接接收時(shí)讓操作系統(tǒng)通知程序的話,可以試試select庫
創(chuàng)新互聯(lián)公司主打移動(dòng)網(wǎng)站、成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護(hù)、主機(jī)域名、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實(shí)力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再?zèng)Q定采用什么樣的設(shè)計(jì)。最后,要實(shí)現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計(jì),我們還會(huì)規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。
從事與軟件相關(guān)工作的人,應(yīng)該都聽過“日志”一詞。
日志就是跟蹤軟件運(yùn)行時(shí)事件的方法,為了能夠在程序運(yùn)行過程中記錄錯(cuò)誤。
通過日志記錄程序的運(yùn)行,方便我們查詢信息,以便追蹤問題、進(jìn)行維護(hù)和調(diào)試、還是數(shù)據(jù)分析。
并且各編程語言都形成了各自的日志體系和相應(yīng)的框架。
日志的作用總結(jié):
首先我們要樹立一個(gè)觀點(diǎn),那就是“不是為了記錄日志而記錄日志,日志也不是隨意記的”。要實(shí)現(xiàn)能夠只通過日志文件還原整個(gè)程序執(zhí)行的過程,達(dá)到能透明地看到程序里執(zhí)行情況,每個(gè)線程每個(gè)過程到底執(zhí)行結(jié)果的目的。日志就像飛機(jī)的黑匣子一樣,應(yīng)當(dāng)能夠復(fù)原異常的整個(gè)現(xiàn)場乃至細(xì)節(jié)。
在項(xiàng)目中,日志這個(gè)功能非常重要,我們要重視起來。
在Python中,使用logging模塊來進(jìn)行日志的處理。
logging是Python的內(nèi)置模塊,主要用于將日志信息進(jìn)行格式化內(nèi)容輸出,可將格式化內(nèi)容輸出到文件,也可輸出到屏幕。
我們在開發(fā)過程中,常用print()函數(shù)來進(jìn)行調(diào)試,但是在實(shí)際應(yīng)用的部署時(shí),我們要將日志信息輸出到文件中,方便后續(xù)查找以及備份。
在我們使用日志管理時(shí),我們也可以將日志格式化成Json對(duì)象轉(zhuǎn)存到ELK中方便圖形化查看及管理。
logging模塊將日志系統(tǒng)從高向低依次定義了四個(gè)類,分別是logger(日志器)、handler(處理器)、filter(過濾器)和formatter(格式器)。其中由日志器生成的實(shí)例將接管原本日志記錄函數(shù)logging.log的功能。
說明:
我們先來思考下下面的兩個(gè)問題:
在軟件開發(fā)階段或部署開發(fā)環(huán)境時(shí),為了盡可能詳細(xì)的查看應(yīng)用程序的運(yùn)行狀態(tài)來保證上線后的穩(wěn)定性,我們可能需要把該應(yīng)用程序所有的運(yùn)行日志全部記錄下來進(jìn)行分析,這是非常耗費(fèi)機(jī)器性能的。
當(dāng)應(yīng)用程序正式發(fā)布或在生產(chǎn)環(huán)境部署應(yīng)用程序時(shí),我們通常只需要記錄應(yīng)用程序的異常信息、錯(cuò)誤信息等,這樣既可以減小服務(wù)器的I/O壓力,也可以避免我們在排查故障時(shí)被淹沒在日志的海洋里。
那么怎樣才能在不改動(dòng)應(yīng)用程序代碼的情況下,根據(jù)事件的重要性或者稱之為等級(jí),實(shí)現(xiàn)在不同的環(huán)境中,記錄不同詳細(xì)程度的日志呢?
這就是日志等級(jí)的作用了,我們通過配置文件指定我們需要的日志等級(jí)就可以了。
說明:
總結(jié):
開發(fā)應(yīng)用程序時(shí)或部署開發(fā)環(huán)境時(shí),可以使用DEBUG或INFO級(jí)別的日志獲取盡可能詳細(xì)的日志信息,可以方便進(jìn)行開發(fā)或部署調(diào)試。 應(yīng)用上線或部署生產(chǎn)環(huán)境時(shí),應(yīng)用使用WARNING或ERROR或CRITICAL級(jí)別的日志,來降低機(jī)器的I/O壓力和提高獲取錯(cuò)誤日志信息的效率。 日志級(jí)別的指定通常都是在應(yīng)用程序的配置文件中進(jìn)行指定的。 不同的應(yīng)用程序所定義的日志等級(jí)會(huì)有所差別,根據(jù)實(shí)際需求來決定。
寫本文的目的是我在寫 python 項(xiàng)目的時(shí)候需要記錄日志,我忘記怎么處理了,每次都需要去網(wǎng)上查一遍, 好記性不如爛筆頭 , 這里把查閱的內(nèi)容記錄下來,方便以后查找。
python 項(xiàng)目中記錄日志,可以使用 logging 模塊,logging 模塊定義的函數(shù)和類為應(yīng)用程序和庫的開發(fā)實(shí)現(xiàn)了一個(gè)靈活的事件日志系統(tǒng)。logging 模塊是Python的一個(gè)標(biāo)準(zhǔn)庫模塊,由標(biāo)準(zhǔn)庫模塊提供日志記錄API的關(guān)鍵好處是所有Python模塊都可以使用這個(gè)日志記錄功能。所以,你的應(yīng)用日志可以將你自己的日志信息與來自第三方模塊的信息整合起來。
在 __init__.py 文件中做如下配置:
控制臺(tái)輸出日志如下:
參考文檔
def?write_log(username,operation):
'''
寫日志函數(shù)
:param?username:用戶名
:param?operation:用戶的操作信息
:return:
'''
w_time?=?time.strftime('%Y-%m-%d?%H%M%S')
with?open('log.txt','a+')?as?fw:
log_content?=?'%s?%s?%s?\n'%(w_time,username,operation)
fw.write(log_content)
希望對(duì)你有幫助!