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

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

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

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

        相信各位小伙伴在平時比賽或者項(xiàng)目中寫Python代碼的時候,肯定會遇到代碼出現(xiàn)莫名其妙的報錯,而我們一時半會無法快速定位到問題出在哪里。這時候,相信很多同學(xué)都會使用 print() 函數(shù)在代碼的不同地方插入打印輸出來不斷調(diào)試、縮小問題范圍。雖然這種方式簡單粗暴,在小項(xiàng)目或調(diào)試時確實(shí)能派上用場,但隨著項(xiàng)目復(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 模塊正是官方推薦用于記錄日志的強(qiáng)大工具。它不僅支持不同的日志等級(如 DEBUG、INFO、WARNING、ERRORCRITICAL),還允許我們將日志靈活地輸出到控制臺、文件,甚至遠(yuǎn)程服務(wù)器。此外,logging 還支持自定義日志格式和多種處理器組合,能很好地適配各種復(fù)雜應(yīng)用場景。接下來,我們就從最基礎(chǔ)的用法入手,帶你一步步掌握 logging 模塊的強(qiáng)大功能,寫出更專業(yè)、更易維護(hù)的Python代碼!??!

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

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

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

  • 最低顯示的日志等級:

        從下面的代碼中我們可以看到,我們可以使用level參數(shù)來設(shè)置日志的最低顯示的等級,而當(dāng)我們在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ù)來對我們的日志顯示格式進(jìn)行設(shè)置,format有很多可供選擇的占位符,具體的見下表:

format占位符含義說明
%(asctime)s日志事件發(fā)生的時間(默認(rèn)格式可自定義)
%(levelname)s日志級別名稱(如 INFO、DEBUG 等)
%(message)s日志內(nèi)容主體(你傳入的日志消息)
%(name)s日志器的名稱(Logger對象的名字)
%(filename)s當(dāng)前執(zhí)行代碼的文件名
%(funcName)s調(diào)用日志輸出函數(shù)的函數(shù)名
%(lineno)d輸出日志的代碼行號
%(pathname)s當(dāng)前執(zhí)行代碼的完整路徑
%(module)s模塊名
%(threadName)s線程名稱(在多線程應(yīng)用中常用)
%(process)d進(jìn)程 ID(在多進(jìn)程應(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")

  • 日志輸出位置:

        除了將日志信息打印到終端(默認(rèn)行為)以外,我們還可以通過 filename 參數(shù)將日志寫入到指定的文件中。這樣一來,我們就可以保存程序運(yùn)行過程中的所有重要信息,便于后續(xù)排查問題或?qū)ο到y(tǒng)進(jìn)行日志分析。 我們還可以指定文件的編碼方式,比如使用 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")

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

        如果想每次運(yùn)行都重新生成日志文件,我們可以繼續(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")

        除此之外,我們也可以給當(dāng)前的日志信息“命個名”,這在大型項(xiàng)目中非常有用!只需要通過 logging.getLogger("名字") 來創(chuàng)建一個具名 Logger,你可以根據(jù)模塊、功能、組件的不同給它們起不同的名字,這樣日志輸出的時候就能快速定位日志是從哪個部分打印出來的,非常適合團(tuán)隊(duì)協(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é)就要問了:“哥們哥們,如果我既想讓日志在終端顯示,又想把日志寫進(jìn)文件保存下來,該怎么辦呢?”這個問題非常常見!實(shí)際上,basicConfig 方式雖然簡單方便,但它本質(zhì)上是對根日志器(root logger)做一次性配置的,不支持同時配置多個輸出目標(biāo)(Handler)。也就是說,如果你想實(shí)現(xiàn)“同時輸出到終端和文件”,就需要用更靈活的方式——自定義 Logger + Handler + Formatter 的組合配置

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

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

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

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

相關(guān)文章

  • Python中axis=0與axis=1指的方向有什么不同詳解

    Python中axis=0與axis=1指的方向有什么不同詳解

    對數(shù)據(jù)進(jìn)行操作時,經(jīng)常需要在橫軸方向或者數(shù)軸方向?qū)?shù)據(jù)進(jìn)行操作,這時需要設(shè)定參數(shù)axis的值,下面這篇文章主要給大家介紹了關(guān)于Python中axis=0與axis=1指的方向有什么不同的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • 淺談flask中的before_request與after_request

    淺談flask中的before_request與after_request

    這篇文章主要介紹了淺談flask中的before_request與after_request,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 關(guān)于pycharm?python3.7成功安裝dlib庫的問題

    關(guān)于pycharm?python3.7成功安裝dlib庫的問題

    這篇文章主要介紹了pycharm?python3.7成功安裝dlib庫的解決方法,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Python實(shí)現(xiàn)K-近鄰算法的示例代碼

    Python實(shí)現(xiàn)K-近鄰算法的示例代碼

    k-近鄰算法(K-Nearest Neighbour algorithm),又稱 KNN 算法,是數(shù)據(jù)挖掘技術(shù)中原理最簡單的算法。本文將介紹實(shí)現(xiàn)K-近鄰算法的示例代碼,需要的可以參考一下
    2022-09-09
  • python 辦公自動化——基于pyqt5和openpyxl統(tǒng)計(jì)符合要求的名單

    python 辦公自動化——基于pyqt5和openpyxl統(tǒng)計(jì)符合要求的名單

    前幾天接到的一個需求,因?yàn)閷W(xué)校給的名單是青年大學(xué)習(xí)已學(xué)習(xí)的名單,然而要知道未學(xué)習(xí)的名單只能從所有團(tuán)員中再排查一次,過程相當(dāng)麻煩。剛好我也學(xué)過一些操作辦公軟件的基礎(chǔ),再加上最近在學(xué)pyqt5,所以我決定用python寫個自動操作文件的腳本給她用用。
    2021-05-05
  • 關(guān)于Python的一些學(xué)習(xí)總結(jié)

    關(guān)于Python的一些學(xué)習(xí)總結(jié)

    這篇文章主要介紹了關(guān)于Python的一些總結(jié),希望自己以后在學(xué)習(xí)Python的過程中可以邊學(xué)習(xí)邊總結(jié),就自己之前的學(xué)習(xí)先做以總結(jié),之后將不斷總結(jié)更新
    2018-05-05
  • Python與MongoDB交互的代碼實(shí)現(xiàn)

    Python與MongoDB交互的代碼實(shí)現(xiàn)

    Python與MongoDB的交互通常通過pymongo庫來實(shí)現(xiàn),pymongo是一個官方的Python驅(qū)動程序,用于與MongoDB數(shù)據(jù)庫進(jìn)行交互,以下是一個簡單的示例,具有一定的參考價值,需要的朋友可以參考下
    2024-10-10
  • Pycharm新手使用教程(圖文詳解)

    Pycharm新手使用教程(圖文詳解)

    這篇文章主要介紹了Pycharm新手使用教程(圖文詳解),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • python3+PyQt5 數(shù)據(jù)庫編程--增刪改實(shí)例

    python3+PyQt5 數(shù)據(jù)庫編程--增刪改實(shí)例

    今天小編就為大家分享一篇python3+PyQt5 數(shù)據(jù)庫編程--增刪改實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python微信自動化庫使用詳解

    Python微信自動化庫使用詳解

    Python微信自動化是指使用Python編程語言來實(shí)現(xiàn)對微信的自動化操作,在Python中,有幾個庫可以用于微信自動化操作,包括itchat、wxpy、wechatpy和wxauto,以下是對這些庫的詳細(xì)介紹,需要的朋友可以參考下
    2025-03-03

最新評論