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

Python學(xué)習(xí)之日志模塊詳解

 更新時(shí)間:2022年03月28日 09:03:48   作者:渴望力量的哈士奇  
說(shuō)到日志,我們完全可以想象為現(xiàn)實(shí)生活中的日記。日記是我們平時(shí)記錄我們生活中點(diǎn)點(diǎn)滴滴的一種方法,而日志我們可以認(rèn)為是 程序的日記 ,程序的日記是用來(lái)記錄程序的行為。本文將詳細(xì)介紹Python中的日志模塊(logging),需要的可以參考一下

OK,今天我們來(lái)學(xué)習(xí)一下 python 中的日志模塊,日志模塊也是我們?nèi)蘸蟮拈_(kāi)發(fā)工作中使用率很高的模塊之一,接下來(lái)們就看一看今天具體要學(xué)習(xí)日志模塊中的那些內(nèi)容吧。

日志的作用

說(shuō)到日志,我們完全可以想象為現(xiàn)實(shí)生活中的日記。日記是我們平時(shí)記錄我們生活中點(diǎn)點(diǎn)滴滴的一種方法,而日志我們可以認(rèn)為是 程序的日記 ,程序的日記是用來(lái)記錄程序的行為,一般來(lái)說(shuō)我們可以通過(guò)日志記錄一些程序的重要信息。

比如哪里報(bào)錯(cuò)了?報(bào)錯(cuò)原因是什么?這個(gè)時(shí)候我們就可以通過(guò)查看日志知道哪里出了什么錯(cuò)誤,并且是什么原因造成的,這樣就可以幫助我們快速查錯(cuò)并修復(fù)bug。

其實(shí)并不僅僅是錯(cuò)誤的信息,我們還可以通過(guò)日志記錄程序運(yùn)行的狀態(tài)。

日志的等級(jí)

既然明確了日志的作用,在平時(shí)的日志記錄過(guò)程中我們可以根據(jù)自己不同的業(yè)務(wù)需要進(jìn)行不同等級(jí)的日志的記錄。

debug:可以幫助我們?cè)谄綍r(shí)的開(kāi)發(fā)過(guò)程中,幫助我們查看一些輸出的信息是否正確。它可以替代我們平時(shí)使用的 print() 函數(shù)。

info:它代表了一般的消息類(lèi)信息,只是為了記錄一些程序的行為,比如程序執(zhí)行到了某個(gè)位置,進(jìn)行一些簡(jiǎn)單的記錄。

warnning:該等級(jí)是一種警告,一般來(lái)說(shuō)程序不會(huì)出錯(cuò),但是可能存在一定的潛在風(fēng)險(xiǎn)。

error:一般對(duì)應(yīng)業(yè)務(wù)中出現(xiàn)了重大問(wèn)題。比如異常或者業(yè)務(wù)邏輯不應(yīng)該執(zhí)行到某種情況。我們都可以通過(guò)error來(lái)進(jìn)行記錄。

critical:比 error 更嚴(yán)重的級(jí)別,不過(guò)一般來(lái)說(shuō) error 級(jí)別已經(jīng)很?chē)?yán)重了,所以 critical 很少使用。

logging 模塊的使用

其實(shí) logging 模塊使用起來(lái)還是比較復(fù)雜的,不過(guò)我們初學(xué)乍道,只需要學(xué)習(xí)使用 logging.basicConfig 就可以滿(mǎn)足我們最基本的日志記錄功能。

接下來(lái)我們看一下 logging.basicConfig 需要傳入哪些參數(shù)以及如何使用。

參數(shù)名作用舉例
lever日志輸出的最低等級(jí)lever=logging.DEBUG
format日志輸出格式見(jiàn)下文的 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í)別名稱(chēng)
%(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' 模式
                            # 與文件寫(xiě)入的模式相似,'w' 模式為沒(méi)有文件時(shí)創(chuàng)建文件;'a' 模式為追加內(nèi)容寫(xiě)入日志文件
)


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' 模式
                            # 與文件寫(xiě)入的模式相似,'w' 模式為沒(méi)有文件時(shí)創(chuàng)建文件;'a' 模式為追加內(nèi)容寫(xiě)入日志文件
)


logging.debug('這是一條 debug 信息 ---> \'a\' 模式第二次寫(xiě)入')
logging.info('這是一條 日志記錄 信息 ---> \'a\' 模式第二次寫(xiě)入')
logging.warning('這是一條 警告 信息 ---> \'a\' 模式第二次寫(xiě)入')
logging.error('這是一條 重大的錯(cuò)誤 信息 ---> \'a\' 模式第二次寫(xiě)入')

# >>> 執(zhí)行結(jié)果如下圖

這里關(guān)于文件是否存在,使用 ‘w’ 模式還是 ‘a’ 模式,我們完全可以通過(guò) 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' 模式
                                # 與文件寫(xiě)入的模式相似,'w' 模式為沒(méi)有文件時(shí)創(chuàng)建文件;'a' 模式為追加內(nèi)容寫(xiě)入日志文件
    )

    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 信息 ---> 第三次寫(xiě)入')
log.info('這是一條 日志記錄 信息 ---> 第三次寫(xiě)入')
log.warning('這是一條 警告 信息 ---> 第三次寫(xiě)入')
log.error('這是一條 重大的錯(cuò)誤 信息 ---> 第三次寫(xiě)入')

# >>> 執(zhí)行結(jié)果如下圖:

到此這篇關(guān)于Python學(xué)習(xí)之日志模塊詳解的文章就介紹到這了,更多相關(guān)Python日志模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Tensorflow數(shù)據(jù)讀取有三種方式(next_batch)

    詳解Tensorflow數(shù)據(jù)讀取有三種方式(next_batch)

    本篇文章主要介紹了Tensorflow數(shù)據(jù)讀取有三種方式(next_batch),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • 詳解Python使用Plotly繪圖工具,繪制甘特圖

    詳解Python使用Plotly繪圖工具,繪制甘特圖

    這篇文章主要介紹了Python使用Plotly繪圖工具,繪制甘特圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 利用python獲取當(dāng)前日期前后N天或N月日期的方法示例

    利用python獲取當(dāng)前日期前后N天或N月日期的方法示例

    最近在工作中遇到一個(gè)需求,查找資料發(fā)現(xiàn)了一個(gè)很好的時(shí)間組件,所以下面這篇文章主要給大家介紹了關(guān)于利用python獲取當(dāng)前日期前后N天或N月日期的方法示例,需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2017-07-07
  • Python批量改變圖片名字的示例代碼

    Python批量改變圖片名字的示例代碼

    本文主要介紹了Python批量改變圖片名字的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 什么是Python變量作用域

    什么是Python變量作用域

    在本篇文章里小編給大家整理的是關(guān)于Python變量作用域的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • django中模板的html自動(dòng)轉(zhuǎn)意方法

    django中模板的html自動(dòng)轉(zhuǎn)意方法

    今天小編就為大家分享一篇django中模板的html自動(dòng)轉(zhuǎn)意方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python操作列表常用方法實(shí)例小結(jié)【創(chuàng)建、遍歷、統(tǒng)計(jì)、切片等】

    Python操作列表常用方法實(shí)例小結(jié)【創(chuàng)建、遍歷、統(tǒng)計(jì)、切片等】

    這篇文章主要介紹了Python操作列表常用方法,結(jié)合實(shí)例形式總結(jié)分析了Python列表常見(jiàn)的創(chuàng)建、遍歷、統(tǒng)計(jì)、切片等操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • Python networkx包的實(shí)現(xiàn)

    Python networkx包的實(shí)現(xiàn)

    這篇文章主要介紹了Python networkx包的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • docker-py 用Python調(diào)用Docker接口的方法

    docker-py 用Python調(diào)用Docker接口的方法

    今天小編就為大家分享一篇docker-py 用Python調(diào)用Docker接口的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • 基于python實(shí)現(xiàn)藍(lán)牙通信代碼實(shí)例

    基于python實(shí)現(xiàn)藍(lán)牙通信代碼實(shí)例

    這篇文章主要介紹了基于python實(shí)現(xiàn)藍(lán)牙通信代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論