最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python日志模塊Logging使用指北(最新推薦)

 更新時間:2025年04月21日 08:53:59   作者:SkyXZ  
Logging模塊是Python中一個很重要的日志模塊,它提供了靈活的日志記錄功能,廣泛應(yīng)用于調(diào)試、運行狀態(tài)監(jiān)控、錯誤追蹤以及系統(tǒng)運維中,這篇文章主要介紹了Python日志模塊Logging使用指北,需要的朋友可以參考下

Logging模塊是Python中一個很重要的日志模塊,它提供了靈活的日志記錄功能,廣泛應(yīng)用于調(diào)試、運行狀態(tài)監(jiān)控、錯誤追蹤以及系統(tǒng)運維中。相比于簡單的print()打印調(diào)試,Logging支持不同的日志級別(如DEBUG、INFOWARNING、ERRORCRITICAL),可將日志輸出到不同位置(如控制臺、文件、網(wǎng)絡(luò)等),還能自定義日志格式和處理方式,從而更好地滿足實際項目中的日志管理需求。

        相信各位小伙伴在平時比賽或者項目中寫Python代碼的時候,肯定會遇到代碼出現(xiàn)莫名其妙的報錯,而我們一時半會無法快速定位到問題出在哪里。這時候,相信很多同學(xué)都會使用 print() 函數(shù)在代碼的不同地方插入打印輸出來不斷調(diào)試、縮小問題范圍。雖然這種方式簡單粗暴,在小項目或調(diào)試時確實能派上用場,但隨著項目復(fù)雜度的提高,print()調(diào)試法就顯得力不從心了。比如,你可能想?yún)^(qū)分調(diào)試信息和錯誤信息,或者只在生產(chǎn)環(huán)境中輸出關(guān)鍵日志,還可能需要將日志寫入文件供后續(xù)分析抑或是在找到問題之后還需手動刪除各處的調(diào)試 print() 函數(shù),這不僅麻煩,而且很容易遺漏,甚至可能將調(diào)試信息帶到線上環(huán)境,造成信息泄露或日志污染。

        因此,學(xué)會使用專業(yè)的日志工具顯得尤為重要。在Python中,logging 模塊正是官方推薦用于記錄日志的強大工具。它不僅支持不同的日志等級(如 DEBUG、INFO、WARNING、ERROR、CRITICAL),還允許我們將日志靈活地輸出到控制臺、文件,甚至遠程服務(wù)器。此外,logging 還支持自定義日志格式和多種處理器組合,能很好地適配各種復(fù)雜應(yīng)用場景。接下來,我們就從最基礎(chǔ)的用法入手,帶你一步步掌握 logging 模塊的強大功能,寫出更專業(yè)、更易維護的Python代碼?。?!

        首先我們要知道,在Logging模塊中日志根據(jù)作用以及重要程度從小到大依次被分為了如下五個等級,具體如下表:

日志等級(level)描述
DEBUG調(diào)試信息,通常在診斷問題的時候使用
INFO普通信息,確認程序按照預(yù)期運行
WARNING警告信息,表示發(fā)生意想不到的事,或者指示接下來可能會出現(xiàn)一些問題,但是程序還是繼續(xù)運行
ERROR錯誤信息,程序運行中出現(xiàn)了一些問題,程序某些功能可能不能執(zhí)行
CRITICAL危險信息,一個嚴重的錯誤,導(dǎo)致程序無法繼續(xù)運行

        知道了這些,那我們具體該如何在代碼中實現(xiàn)日志管理呢?我們接著往下講,首先我們肯定是要在代碼中導(dǎo)入我們的logging模塊,這個模塊是Python內(nèi)置的,無需額外安裝,接著我們要引入logging模塊中的basicConfig函數(shù),這個是配置日志系統(tǒng)最常用、最簡單的一種方式,我們可以通過它來設(shè)置最低顯示的日志等級、日志的顯示格式、日志輸出位置(默認是終端)以及寫入文件的文件名和編碼,接著我們結(jié)合示例來給大家演示一下:

  • 最低顯示的日志等級:

        從下面的代碼中我們可以看到,我們可以使用level參數(shù)來設(shè)置日志的最低顯示的等級,而當我們在basicConfig中將最低顯示的日志等級level設(shè)置為WARNING的時候,只有大于 WARNING的消息才會被顯示出來

import logging
logging.basicConfig(
    level=logging.WARNING,
)
logging.debug("This is a debug message")
logging.info("This is an info message")
logging.warning("This is a warning message")
logging.error("This is an error message")
logging.critical("This is a critical message")

  • 日志的顯示格式:

        除了設(shè)置最低顯示的日志等級之外,我們還可以使用format參數(shù)來對我們的日志顯示格式進行設(shè)置,format有很多可供選擇的占位符,具體的見下表:

format占位符含義說明
%(asctime)s日志事件發(fā)生的時間(默認格式可自定義)
%(levelname)s日志級別名稱(如 INFO、DEBUG 等)
%(message)s日志內(nèi)容主體(你傳入的日志消息)
%(name)s日志器的名稱(Logger對象的名字)
%(filename)s當前執(zhí)行代碼的文件名
%(funcName)s調(diào)用日志輸出函數(shù)的函數(shù)名
%(lineno)d輸出日志的代碼行號
%(pathname)s當前執(zhí)行代碼的完整路徑
%(module)s模塊名
%(threadName)s線程名稱(在多線程應(yīng)用中常用)
%(process)d進程 ID(在多進程應(yīng)用中常用)
import logging
logging.basicConfig(
    level=logging.WARNING,
    format="時間:%(asctime)s-日志名稱:%(name)s-日志級別:%(levelname)s-日志信息:%(message)s-文件名:%(filename)s-行號:%(lineno)d"
)
logging.debug("This is a debug message")
logging.info("This is an info message")
logging.warning("This is a warning message")
logging.error("This is an error message")
logging.critical("This is a critical message")

  • 日志輸出位置:

        除了將日志信息打印到終端(默認行為)以外,我們還可以通過 filename 參數(shù)將日志寫入到指定的文件中。這樣一來,我們就可以保存程序運行過程中的所有重要信息,便于后續(xù)排查問題或?qū)ο到y(tǒng)進行日志分析。 我們還可以指定文件的編碼方式,比如使用 utf-8,以避免中文亂碼等問題。下面我們通過一個示例將日志寫入文件中:

import logging
logging.basicConfig(
    level=logging.WARNING,
    format = '[%(name)s] [%(asctime)s.%(msecs)03d] [%(levelname)s] %(message)s',
    filename='my_log.log',
    encoding="utf-8"
)
logging.debug("This is a debug message")
logging.info("This is an info message")
logging.warning("This is a warning message")
logging.error("This is an error message")
logging.critical("This is a critical message")

        可以看到,運行了這段代碼之后終端沒有輸出了,而在同路徑下生成了一個我們指定的my_log.log文件,這個文件里就有我們需要的日志輸出

        如果想每次運行都重新生成日志文件,我們可以繼續(xù)加上 filemode='w' 參數(shù)

import logging
logging.basicConfig(
    level=logging.WARNING,
    format = '[%(name)s] [%(asctime)s.%(msecs)03d] [%(levelname)s] %(message)s',
    filename='my_log.log',
    encoding="utf-8",
    filemode='w'
)
logging.debug("This is a debug message")
logging.info("This is an info message")
logging.warning("This is a warning message")
logging.error("This is an error message")
logging.critical("This is a critical message")

        除此之外,我們也可以給當前的日志信息“命個名”,這在大型項目中非常有用!只需要通過 logging.getLogger("名字") 來創(chuàng)建一個具名 Logger,你可以根據(jù)模塊、功能、組件的不同給它們起不同的名字,這樣日志輸出的時候就能快速定位日志是從哪個部分打印出來的,非常適合團隊協(xié)作和大型工程的調(diào)試分析。

import logging
logging.basicConfig(
    level=logging.WARNING,
    format = '[%(name)s] [%(asctime)s.%(msecs)03d] [%(levelname)s] %(message)s',
)
logger = logging.getLogger("example")
logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")

        但是有同學(xué)就要問了:“哥們哥們,如果我既想讓日志在終端顯示,又想把日志寫進文件保存下來,該怎么辦呢?”這個問題非常常見!實際上,basicConfig 方式雖然簡單方便,但它本質(zhì)上是對根日志器(root logger)做一次性配置的,不支持同時配置多個輸出目標(Handler)。也就是說,如果你想實現(xiàn)“同時輸出到終端和文件”,就需要用更靈活的方式——自定義 Logger + Handler + Formatter 的組合配置!

        Handler 是什么呢?Handler 是 logging 模塊中的一個核心概念,它負責將日志消息輸出到指定的目標,如控制臺、文件、網(wǎng)絡(luò)等。而 Formatter 則負責定義輸出日志的格式。通過組合 LoggerHandler 和 Formatter,我們能夠更加靈活地控制日志的輸出方式和格式。我們可以用下圖來進行理解

        具體的示例如下,我們首先創(chuàng)建一個 logger 對象,并通過 getLogger 方法為其指定一個名稱(在這里是 "example_logger")。接著,我們使用 setLevel 方法設(shè)置日志的最低輸出級別為 DEBUG,這樣所有級別(包括 DEBUG、INFO、WARNING、ERROR 和 CRITICAL)的日志都能被處理。然后,我們創(chuàng)建了兩個 Handler:一個是 StreamHandler,用于將日志輸出到控制臺;另一個是 FileHandler,用于將日志寫入名為 logfile.log 的文件。接著,我們使用 Formatter 設(shè)置日志輸出的格式,包括日志器名稱、日志時間、日志級別和日志信息,最后將這個 Formatter 配置應(yīng)用到兩個 Handler 上。最后,通過 addHandler 方法將這兩個 Handler 添加到 logger 中,這樣我們就能實現(xiàn)同時將日志輸出到控制臺和文件。

import logging
logger = logging.getLogger("example_logger")
logger.setLevel(logging.DEBUG)  
# 創(chuàng)建兩個Handler,分別輸出到控制臺和文件
console_handler = logging.StreamHandler()  # 輸出到控制臺
file_handler = logging.FileHandler("logfile.log", encoding="utf-8")  # 輸出到文件
# 創(chuàng)建Formatter并設(shè)置格式
formatter = logging.Formatter(
    '[%(name)s] [%(asctime)s] [%(levelname)s] %(message)s'
)
console_handler.setFormatter(formatter)  # 控制臺Handler設(shè)置Formatter
file_handler.setFormatter(formatter)  # 文件Handler設(shè)置Formatter
# 將Handler添加到Logger中
logger.addHandler(console_handler)
logger.addHandler(file_handler)
logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")

        我們運行下這段代碼可以發(fā)現(xiàn)不僅終端有輸出,我們的日志文件里面也有記錄:

到此這篇關(guān)于Python日志模塊Logging使用指北的文章就介紹到這了,更多相關(guān)Python日志模塊Logging內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python高溫預(yù)警數(shù)據(jù)獲取實例

    python高溫預(yù)警數(shù)據(jù)獲取實例

    這篇文章主要為大家介紹了利用python獲取高溫數(shù)據(jù)進行高溫預(yù)警的防護措施,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 一篇文章帶你了解python正則表達式的正確用法

    一篇文章帶你了解python正則表達式的正確用法

    這篇文章主要介紹了Python中正則表達式的詳細教程,正則表達式是Python學(xué)習(xí)進階當中的重要內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 使用python實現(xiàn)抓取騰訊視頻所有電影的爬蟲

    使用python實現(xiàn)抓取騰訊視頻所有電影的爬蟲

    這篇文章主要介紹了使用python實現(xiàn)抓取騰訊視頻所有電影的爬蟲,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • Python基于httpx模塊實現(xiàn)發(fā)送請求

    Python基于httpx模塊實現(xiàn)發(fā)送請求

    這篇文章主要介紹了Python基于httpx模塊實現(xiàn)發(fā)送請求,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Python數(shù)據(jù)庫封裝實現(xiàn)代碼示例解析

    Python數(shù)據(jù)庫封裝實現(xiàn)代碼示例解析

    這篇文章主要介紹了Python數(shù)據(jù)庫封裝實現(xiàn)代碼示例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Python中識別圖片/滑塊驗證碼準確率極高的ddddocr庫詳解

    Python中識別圖片/滑塊驗證碼準確率極高的ddddocr庫詳解

    驗證碼的種類有很多,它是常用的一種反爬手段,包括:圖片驗證碼,滑塊驗證碼,等一些常見的驗證碼場景。這里推薦一個簡單實用的識別驗證碼的庫?ddddocr?(帶帶弟弟ocr)庫,希望大家喜歡
    2023-02-02
  • PyQt5 對圖片進行縮放的實例

    PyQt5 對圖片進行縮放的實例

    今天小編就為大家分享一篇PyQt5 對圖片進行縮放的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python中的并發(fā)編程實例

    Python中的并發(fā)編程實例

    這篇文章主要介紹了Python中的并發(fā)編程實例,主要是對Threading模塊的應(yīng)用,文中自定義了一個Threading類庫,需要的朋友可以參考下
    2014-07-07
  • Python獲取時間戳代碼實例

    Python獲取時間戳代碼實例

    這篇文章主要介紹了Python獲取時間戳代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • python創(chuàng)建exe文件的實現(xiàn)步驟

    python創(chuàng)建exe文件的實現(xiàn)步驟

    本文主要介紹了python創(chuàng)建exe文件的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09

最新評論

鹤壁市| 鄂托克前旗| 乌拉特中旗| 衢州市| 新建县| 普定县| 蕲春县| 阿拉善左旗| 海盐县| 施甸县| 曲周县| 新化县| 新绛县| 兴山县| 探索| 格尔木市| 隆昌县| 安塞县| 黔东| 拉萨市| 淄博市| 象州县| 独山县| 元朗区| 潼关县| 墨玉县| 西吉县| 韶关市| 宾川县| 和平县| 舞钢市| 高淳县| 海淀区| 谷城县| 隆子县| 泊头市| 钟祥市| 衡水市| 梨树县| 绥宁县| 寻甸|