Python學(xué)習(xí)之日志模塊詳解
OK,今天我們來學(xué)習(xí)一下 python 中的日志模塊,日志模塊也是我們?nèi)蘸蟮拈_發(fā)工作中使用率很高的模塊之一,接下來們就看一看今天具體要學(xué)習(xí)日志模塊中的那些內(nèi)容吧。
日志的作用
說到日志,我們完全可以想象為現(xiàn)實(shí)生活中的日記。日記是我們平時(shí)記錄我們生活中點(diǎn)點(diǎn)滴滴的一種方法,而日志我們可以認(rèn)為是 程序的日記 ,程序的日記是用來記錄程序的行為,一般來說我們可以通過日志記錄一些程序的重要信息。
比如哪里報(bào)錯(cuò)了?報(bào)錯(cuò)原因是什么?這個(gè)時(shí)候我們就可以通過查看日志知道哪里出了什么錯(cuò)誤,并且是什么原因造成的,這樣就可以幫助我們快速查錯(cuò)并修復(fù)bug。
其實(shí)并不僅僅是錯(cuò)誤的信息,我們還可以通過日志記錄程序運(yùn)行的狀態(tài)。
日志的等級(jí)
既然明確了日志的作用,在平時(shí)的日志記錄過程中我們可以根據(jù)自己不同的業(yè)務(wù)需要進(jìn)行不同等級(jí)的日志的記錄。
debug:可以幫助我們?cè)谄綍r(shí)的開發(fā)過程中,幫助我們查看一些輸出的信息是否正確。它可以替代我們平時(shí)使用的 print() 函數(shù)。
info:它代表了一般的消息類信息,只是為了記錄一些程序的行為,比如程序執(zhí)行到了某個(gè)位置,進(jìn)行一些簡單的記錄。
warnning:該等級(jí)是一種警告,一般來說程序不會(huì)出錯(cuò),但是可能存在一定的潛在風(fēng)險(xiǎn)。
error:一般對(duì)應(yīng)業(yè)務(wù)中出現(xiàn)了重大問題。比如異?;蛘邩I(yè)務(wù)邏輯不應(yīng)該執(zhí)行到某種情況。我們都可以通過error來進(jìn)行記錄。
critical:比 error 更嚴(yán)重的級(jí)別,不過一般來說 error 級(jí)別已經(jīng)很嚴(yán)重了,所以 critical 很少使用。
logging 模塊的使用
其實(shí) logging 模塊使用起來還是比較復(fù)雜的,不過我們初學(xué)乍道,只需要學(xué)習(xí)使用 logging.basicConfig 就可以滿足我們最基本的日志記錄功能。
接下來我們看一下 logging.basicConfig 需要傳入哪些參數(shù)以及如何使用。
| 參數(shù)名 | 作用 | 舉例 |
|---|---|---|
| lever | 日志輸出的最低等級(jí) | lever=logging.DEBUG |
| format | 日志輸出格式 | 見下文的 format 具體格式 |
| filename | 存儲(chǔ)位置 | filename=‘d://debug.log’ |
| filemode | 輸入模式 | filemode=“w” |
關(guān)于 lever ,lerver的作用是表示最低的日志等級(jí)記錄。如上文中的 lever=logging.DEBUG ,就表示記錄包含 DEBUG 級(jí)別在內(nèi)的所有日志等級(jí)。
format具體格式如下:
| 格式符 | 含義 |
|---|---|
| %(levername)s | 日志級(jí)別名稱 |
| %(pathname)s | 當(dāng)前執(zhí)行程序的路徑(即腳本所在的位置) |
| %(filename)s | 執(zhí)行腳本程序名 |
| %(lineno)d | 日志當(dāng)前的行號(hào) |
| %(asctime)s | 打印日志的時(shí)間 |
| %(message)s | 日志信息 |
常用的日志 fromat 常用方案:fromat = '%(asctime)s %(filename)s[line:%(lineno)d] %(levername)s %(message)s'
logging 模塊演示小案例
import logging
logging.basicConfig( # 針對(duì) basicConfig 進(jìn)行配置(basicConfig 其實(shí)就是對(duì) logging 模塊進(jìn)行動(dòng)態(tài)的調(diào)整,之后可以直接使用)
level=logging.INFO, # INFO 等級(jí)以下的日志不會(huì)被記錄
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # 日志輸出格式
filename='back.log', # 日志存放路徑(存放在當(dāng)前相對(duì)路徑)
filemode='w', # 輸入模式;如果當(dāng)前我們文件已經(jīng)存在,可以使用 'a' 模式替代 'w' 模式
# 與文件寫入的模式相似,'w' 模式為沒有文件時(shí)創(chuàng)建文件;'a' 模式為追加內(nèi)容寫入日志文件
)
logging.debug('這是一條 debug 信息')
logging.info('這是一條 日志記錄 信息')
logging.warning('這是一條 警告 信息')
logging.error('這是一條 重大的錯(cuò)誤 信息')
# >>> 執(zhí)行結(jié)果如下圖

上面我們使用的 filemode 模式是 'w' 模式,現(xiàn)在我們改為 'a' 模式,嘗試將日志追加進(jìn)入 back.log 文件。
import logging
logging.basicConfig( # 針對(duì) basicConfig 進(jìn)行配置(basicConfig 其實(shí)就是對(duì) logging 模塊進(jìn)行動(dòng)態(tài)的調(diào)整,之后可以直接使用)
level=logging.INFO, # INFO 等級(jí)以下的日志不會(huì)被記錄
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # 日志輸出格式
filename='back.log', # 日志存放路徑(存放在當(dāng)前相對(duì)路徑)
filemode='a', # 輸入模式;如果當(dāng)前我們文件已經(jīng)存在,可以使用 'a' 模式替代 'w' 模式
# 與文件寫入的模式相似,'w' 模式為沒有文件時(shí)創(chuàng)建文件;'a' 模式為追加內(nèi)容寫入日志文件
)
logging.debug('這是一條 debug 信息 ---> \'a\' 模式第二次寫入')
logging.info('這是一條 日志記錄 信息 ---> \'a\' 模式第二次寫入')
logging.warning('這是一條 警告 信息 ---> \'a\' 模式第二次寫入')
logging.error('這是一條 重大的錯(cuò)誤 信息 ---> \'a\' 模式第二次寫入')
# >>> 執(zhí)行結(jié)果如下圖

這里關(guān)于文件是否存在,使用 ‘w’ 模式還是 ‘a’ 模式,我們完全可以通過 os 模塊進(jìn)行路徑文件的判斷,所以我們針對(duì)上文的腳本再進(jìn)行優(yōu)化一下。
import logging
import os
def init_log(path):
if os.path.exists(path):
mode = 'a'
else:
mode = 'w'
logging.basicConfig( # 針對(duì) basicConfig 進(jìn)行配置(basicConfig 其實(shí)就是對(duì) logging 模塊進(jìn)行動(dòng)態(tài)的調(diào)整,之后可以直接使用)
level=logging.INFO, # INFO 等級(jí)以下的日志不會(huì)被記錄
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # 日志輸出格式
filename='back.log', # 日志存放路徑(存放在當(dāng)前相對(duì)路徑)
filemode=mode, # 輸入模式;如果當(dāng)前我們文件已經(jīng)存在,可以使用 'a' 模式替代 'w' 模式
# 與文件寫入的模式相似,'w' 模式為沒有文件時(shí)創(chuàng)建文件;'a' 模式為追加內(nèi)容寫入日志文件
)
return logging
current_path = os.getcwd()
path = os.path.join(current_path, 'back.log')
log = init_log(path) # 初始化返回的 init_log() 函數(shù) , 其實(shí)就是 return logging
log.debug('這是一條 debug 信息 ---> 第三次寫入')
log.info('這是一條 日志記錄 信息 ---> 第三次寫入')
log.warning('這是一條 警告 信息 ---> 第三次寫入')
log.error('這是一條 重大的錯(cuò)誤 信息 ---> 第三次寫入')
# >>> 執(zhí)行結(jié)果如下圖:

到此這篇關(guān)于Python學(xué)習(xí)之日志模塊詳解的文章就介紹到這了,更多相關(guān)Python日志模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)實(shí)時(shí)監(jiān)控文件的方法
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)實(shí)時(shí)監(jiān)控文件的3種方法,感興趣的小伙伴們可以參考一下2016-08-08
Python3實(shí)現(xiàn)生成隨機(jī)密碼的方法
這篇文章主要介紹了Python3實(shí)現(xiàn)生成隨機(jī)密碼的方法,是Python程序設(shè)計(jì)中非常實(shí)用的一個(gè)技巧,需要的朋友可以參考下2014-08-08
python獲取全國最新省市區(qū)數(shù)據(jù)并存入表實(shí)例代碼
我們?cè)陂_發(fā)中經(jīng)常會(huì)遇到獲取省市區(qū)等信息的時(shí)候,下面這篇這篇文章主要給大家介紹了關(guān)于python獲取全國最新省市區(qū)數(shù)據(jù)并存入表的相關(guān)資料,需要的朋友可以參考下2021-08-08
在Django的URLconf中進(jìn)行函數(shù)導(dǎo)入的方法
這篇文章主要介紹了在Django的URLconf中進(jìn)行函數(shù)導(dǎo)入的方法,Django是Python的最為著名的開發(fā)框架,需要的朋友可以參考下2015-07-07
python函數(shù)遞歸調(diào)用的實(shí)現(xiàn)
本文主要介紹了python函數(shù)遞歸調(diào)用的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Python的爬蟲程序編寫框架Scrapy入門學(xué)習(xí)教程
Python的一大優(yōu)勢(shì)就是可以輕松制作Web爬蟲,而超高人氣的Scrapy則是名副其實(shí)的Python編寫爬蟲的利器,這里我們就來看一下Python的爬蟲程序編寫框架Scrapy入門學(xué)習(xí)教程:2016-07-07
Python內(nèi)建類型int源碼學(xué)習(xí)
這篇文章主要為大家介紹了Python內(nèi)建類型int源碼學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
python實(shí)現(xiàn)的一個(gè)火車票轉(zhuǎn)讓信息采集器
這篇文章主要介紹了python實(shí)現(xiàn)的一個(gè)火車票轉(zhuǎn)讓信息采集器,采集信息來源是58同程或者趕集網(wǎng),需要的朋友可以參考下2014-07-07

