網(wǎng)站首頁 編程語言 正文
OK,今天我們來學(xué)習(xí)一下 python 中的日志模塊,日志模塊也是我們?nèi)蘸蟮拈_發(fā)工作中使用率很高的模塊之一,接下來們就看一看今天具體要學(xué)習(xí)日志模塊中的那些內(nèi)容吧。
日志的作用
說到日志,我們完全可以想象為現(xiàn)實生活中的日記。日記是我們平時記錄我們生活中點點滴滴的一種方法,而日志我們可以認為是 程序的日記 ,程序的日記是用來記錄程序的行為,一般來說我們可以通過日志記錄一些程序的重要信息。
比如哪里報錯了?報錯原因是什么?這個時候我們就可以通過查看日志知道哪里出了什么錯誤,并且是什么原因造成的,這樣就可以幫助我們快速查錯并修復(fù)bug。
其實并不僅僅是錯誤的信息,我們還可以通過日志記錄程序運行的狀態(tài)。
日志的等級
既然明確了日志的作用,在平時的日志記錄過程中我們可以根據(jù)自己不同的業(yè)務(wù)需要進行不同等級的日志的記錄。
debug:可以幫助我們在平時的開發(fā)過程中,幫助我們查看一些輸出的信息是否正確。它可以替代我們平時使用的 print() 函數(shù)。
info:它代表了一般的消息類信息,只是為了記錄一些程序的行為,比如程序執(zhí)行到了某個位置,進行一些簡單的記錄。
warnning:該等級是一種警告,一般來說程序不會出錯,但是可能存在一定的潛在風(fēng)險。
error:一般對應(yīng)業(yè)務(wù)中出現(xiàn)了重大問題。比如異常或者業(yè)務(wù)邏輯不應(yīng)該執(zhí)行到某種情況。我們都可以通過error來進行記錄。
critical:比 error 更嚴重的級別,不過一般來說 error 級別已經(jīng)很嚴重了,所以 critical 很少使用。
logging 模塊的使用
其實 logging 模塊使用起來還是比較復(fù)雜的,不過我們初學(xué)乍道,只需要學(xué)習(xí)使用 logging.basicConfig 就可以滿足我們最基本的日志記錄功能。
接下來我們看一下 logging.basicConfig 需要傳入哪些參數(shù)以及如何使用。
參數(shù)名 | 作用 | 舉例 |
---|---|---|
lever | 日志輸出的最低等級 | lever=logging.DEBUG |
format | 日志輸出格式 | 見下文的 format 具體格式 |
filename | 存儲位置 | filename=‘d://debug.log’ |
filemode | 輸入模式 | filemode=“w” |
關(guān)于 lever ,lerver的作用是表示最低的日志等級記錄。如上文中的 lever=logging.DEBUG ,就表示記錄包含 DEBUG 級別在內(nèi)的所有日志等級。
format具體格式如下:
格式符 | 含義 |
---|---|
%(levername)s | 日志級別名稱 |
%(pathname)s | 當(dāng)前執(zhí)行程序的路徑(即腳本所在的位置) |
%(filename)s | 執(zhí)行腳本程序名 |
%(lineno)d | 日志當(dāng)前的行號 |
%(asctime)s | 打印日志的時間 |
%(message)s | 日志信息 |
常用的日志 fromat 常用方案:fromat = '%(asctime)s %(filename)s[line:%(lineno)d] %(levername)s %(message)s'
logging 模塊演示小案例
import logging logging.basicConfig( # 針對 basicConfig 進行配置(basicConfig 其實就是對 logging 模塊進行動態(tài)的調(diào)整,之后可以直接使用) level=logging.INFO, # INFO 等級以下的日志不會被記錄 format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # 日志輸出格式 filename='back.log', # 日志存放路徑(存放在當(dāng)前相對路徑) filemode='w', # 輸入模式;如果當(dāng)前我們文件已經(jīng)存在,可以使用 'a' 模式替代 'w' 模式 # 與文件寫入的模式相似,'w' 模式為沒有文件時創(chuàng)建文件;'a' 模式為追加內(nèi)容寫入日志文件 ) logging.debug('這是一條 debug 信息') logging.info('這是一條 日志記錄 信息') logging.warning('這是一條 警告 信息') logging.error('這是一條 重大的錯誤 信息') # >>> 執(zhí)行結(jié)果如下圖
上面我們使用的 filemode 模式是 'w' 模式,現(xiàn)在我們改為 'a' 模式,嘗試將日志追加進入 back.log 文件。
import logging logging.basicConfig( # 針對 basicConfig 進行配置(basicConfig 其實就是對 logging 模塊進行動態(tài)的調(diào)整,之后可以直接使用) level=logging.INFO, # INFO 等級以下的日志不會被記錄 format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # 日志輸出格式 filename='back.log', # 日志存放路徑(存放在當(dāng)前相對路徑) filemode='a', # 輸入模式;如果當(dāng)前我們文件已經(jīng)存在,可以使用 'a' 模式替代 'w' 模式 # 與文件寫入的模式相似,'w' 模式為沒有文件時創(chuàng)建文件;'a' 模式為追加內(nèi)容寫入日志文件 ) logging.debug('這是一條 debug 信息 ---> \'a\' 模式第二次寫入') logging.info('這是一條 日志記錄 信息 ---> \'a\' 模式第二次寫入') logging.warning('這是一條 警告 信息 ---> \'a\' 模式第二次寫入') logging.error('這是一條 重大的錯誤 信息 ---> \'a\' 模式第二次寫入') # >>> 執(zhí)行結(jié)果如下圖
這里關(guān)于文件是否存在,使用 ‘w’ 模式還是 ‘a(chǎn)’ 模式,我們完全可以通過 os 模塊進行路徑文件的判斷,所以我們針對上文的腳本再進行優(yōu)化一下。
import logging import os def init_log(path): if os.path.exists(path): mode = 'a' else: mode = 'w' logging.basicConfig( # 針對 basicConfig 進行配置(basicConfig 其實就是對 logging 模塊進行動態(tài)的調(diào)整,之后可以直接使用) level=logging.INFO, # INFO 等級以下的日志不會被記錄 format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # 日志輸出格式 filename='back.log', # 日志存放路徑(存放在當(dāng)前相對路徑) filemode=mode, # 輸入模式;如果當(dāng)前我們文件已經(jīng)存在,可以使用 'a' 模式替代 'w' 模式 # 與文件寫入的模式相似,'w' 模式為沒有文件時創(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ù) , 其實就是 return logging log.debug('這是一條 debug 信息 ---> 第三次寫入') log.info('這是一條 日志記錄 信息 ---> 第三次寫入') log.warning('這是一條 警告 信息 ---> 第三次寫入') log.error('這是一條 重大的錯誤 信息 ---> 第三次寫入') # >>> 執(zhí)行結(jié)果如下圖:
原文鏈接:https://blog.csdn.net/weixin_42250835/article/details/123781776
相關(guān)推薦
- 2022-12-25 C++?Boost?Accumulators累加器詳細講解_C 語言
- 2022-09-08 go語言中函數(shù)與方法介紹_Golang
- 2022-12-25 React不使用requestIdleCallback實現(xiàn)調(diào)度原理解析_React
- 2022-11-05 關(guān)于Python?Tkinter?復(fù)選框?->Checkbutton_python
- 2022-04-01 k8s ip地址變了 報錯Error getting node“ err=“node \“maste
- 2022-05-11 C#實現(xiàn)搶紅包算法的示例代碼_C#教程
- 2022-03-05 Linux下Apache服務(wù)的部署和配置_Linux
- 2022-03-26 .NET?6中使用DateOnly和TimeOnly類型_ASP.NET
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支