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

python進(jìn)階之logging日志模塊的使用

 更新時(shí)間:2025年08月24日 08:30:35   作者:青銅發(fā)條  
Python?logging模塊功能強(qiáng)大,支持多級(jí)別、多輸出、格式化,核心組件,下面就來(lái)具體介紹一下logging日志模塊的使用,具有一定的參考價(jià)值,感興趣的可以了解一下

引言

在軟件開發(fā)中,日志(Logging)是不可或缺的工具。它幫助我們追蹤程序執(zhí)行流程、診斷錯(cuò)誤、監(jiān)控系統(tǒng)狀態(tài),是調(diào)試、運(yùn)維和分析用戶行為的關(guān)鍵。Python 內(nèi)置的 logging 模塊功能強(qiáng)大且靈活,遠(yuǎn)超簡(jiǎn)單的 print 語(yǔ)句。

一、logging對(duì)比print

你可能習(xí)慣用 print() 輸出信息,但 logging 模塊提供了 print 無(wú)法比擬的優(yōu)勢(shì):

  • 日志級(jí)別(Levels):支持 DEBUG, INFO, WARNING, ERROR, CRITICAL 等級(jí)別,可以方便地控制不同環(huán)境(開發(fā)、測(cè)試、生產(chǎn))輸出的信息量。
  • 靈活的輸出目標(biāo)(Handlers):日志可以同時(shí)輸出到控制臺(tái)、文件、網(wǎng)絡(luò)、郵件、數(shù)據(jù)庫(kù)等,而 print 只能輸出到標(biāo)準(zhǔn)輸出。
  • 豐富的格式化(Formatters):可以自定義日志的輸出格式,包含時(shí)間、模塊名、行號(hào)、日志級(jí)別等信息。
  • 性能:在生產(chǎn)環(huán)境中,可以將日志級(jí)別設(shè)為 WARNING,此時(shí) debug() 調(diào)用幾乎不消耗性能(因?yàn)橄⒉粫?huì)被格式化),而 print 語(yǔ)句即使注釋掉也需要手動(dòng)操作。
  • 結(jié)構(gòu)化與可維護(hù)性logging 提供了清晰的架構(gòu),易于配置和管理,適合大型項(xiàng)目。

二、基本使用方法

2.1 導(dǎo)入 logging 模塊

import logging

2.2 日志級(jí)別介紹

日志級(jí)別用于控制日志的詳細(xì)程度。logging 模塊提供了以下幾種日志級(jí)別:

級(jí)別數(shù)值說明
CRITICAL50致命,嚴(yán)重錯(cuò)誤,程序可能無(wú)法繼續(xù)運(yùn)行
ERROR40錯(cuò)誤,但程序仍可運(yùn)行
WARNING30警告,表示潛在的問題,但程序仍能正常運(yùn)行。默認(rèn)級(jí)別)
INFO20提示,程序正常運(yùn)行時(shí)的信息
DEBUG10調(diào)試,詳細(xì)的調(diào)試信息,通常用于開發(fā)階段
NOTSET0繼承,繼承父記錄器的級(jí)別

注意:默認(rèn)日志級(jí)別是 WARNING,即低于 WARNING 的日志不會(huì)被輸出。

需要設(shè)置日志顯示的最低顯示級(jí)別。如顯示所有日志,設(shè)置為最低級(jí)別DEBUG:

logging.basicConfig(level=logging.DEBUG)

2.3 簡(jiǎn)單使用示例

快速使用日志的完整功能示例:

import logging
logging.basicConfig(level=logging.INFO)

logging.debug("這是一條調(diào)試信息")
logging.info("這是一條普通信息")
logging.warning("這是一條警告信息")
logging.error("這是一條錯(cuò)誤信息")
logging.critical("這是一條嚴(yán)重錯(cuò)誤信息")

運(yùn)行結(jié)果:

三、logging 模塊的核心組件

logging 模塊基于一個(gè)經(jīng)典的 生產(chǎn)者-過濾器-處理器 模型,主要由四個(gè)核心對(duì)象構(gòu)成:

說明示例
logging.Logger記錄器,用于發(fā)出日志消息logger = logging.getLogger("my_logger")
logging.Handler處理器,決定日志輸出位置(如文件、控制臺(tái)等)handler = logging.FileHandler("app.log")
logging.Formatter格式化器,控制日志輸出的格式formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
logging.Filter過濾器,用于更精細(xì)地控制日志記錄filter = logging.Filter("module.name")

3.1 Logger (記錄器)

角色:應(yīng)用程序的接口。你通過 Logger 對(duì)象調(diào)用 debug(), info(), warning(), error(), critical() 方法來(lái)記錄日志。

關(guān)鍵屬性:

  • 名稱(Name):通常使用 logging.getLogger(__name__) 創(chuàng)建,__name__ 是模塊的全名(如 myapp.module),這有助于組織日志層次結(jié)構(gòu)。
  • 級(jí)別(Level):Logger 有一個(gè)日志級(jí)別。只有級(jí)別大于或等于此級(jí)別的日志記錄才會(huì)被處理。如果 Logger 本身沒有設(shè)置級(jí)別,它會(huì)向上傳遞到父 Logger(最終到根 Logger)。

層級(jí)結(jié)構(gòu):Logger 按名稱形成樹狀結(jié)構(gòu)。myapp 是 myapp.module 的父 Logger。日志消息會(huì)沿著這個(gè)層級(jí)向上傳播,除非設(shè)置了 propagate=False。

3.2 Handler (處理器)

角色:決定日志消息的最終去向。一個(gè) Logger 可以有多個(gè) Handler。

常見 Handler

  • StreamHandler:輸出到流(如 sys.stdout, sys.stderr)。
  • FileHandler:輸出到文件。
  • RotatingFileHandler:輸出到文件,并在文件達(dá)到一定大小時(shí)輪轉(zhuǎn)。
  • TimedRotatingFileHandler:按時(shí)間(如每天)輪轉(zhuǎn)日志文件。
  • SMTPHandler:通過郵件發(fā)送日志。
  • SocketHandler / DatagramHandler:通過網(wǎng)絡(luò)發(fā)送日志。
處理器說明
StreamHandler輸出到控制臺(tái)(sys.stdout / sys.stderr)
FileHandler輸出到文件(文本)
RotatingFileHandler按大小輪轉(zhuǎn)日志文件
TimedRotatingFileHandler按時(shí)間輪轉(zhuǎn)日志文件
SMTPHandler通過郵件發(fā)送日志
SocketHandler / DatagramHandler通過網(wǎng)絡(luò)發(fā)送日志
NullHandler空處理器,用于避免無(wú) handler 時(shí)的警告
  • 關(guān)鍵屬性

    • 級(jí)別(Level)Handler 也有自己的級(jí)別。即使 Logger 接受了一條日志,Handler 也會(huì)根據(jù)自己的級(jí)別再次過濾。例如,Logger 級(jí)別是 DEBUG,Handler 級(jí)別是 INFO,那么 DEBUG 級(jí)別的日志不會(huì)被這個(gè) Handler 處理。

    • Formatter:關(guān)聯(lián)一個(gè) Formatter 來(lái)格式化日志消息。

3.3 Formatter (格式化器)

  • 角色:定義日志消息的最終輸出格式。

  • 格式:使用類似 %(asctime)s - %(name)s - %(levelname)s - %(message)s 的字符串。

  • 可以為不同的 Handler 設(shè)置不同的 Formatter。例如,文件日志包含詳細(xì)信息(時(shí)間、行號(hào)),而控制臺(tái)日志只顯示簡(jiǎn)潔信息。

Formatter 常用格式字段如下:

字段說明示例輸出
%(asctime)s日志創(chuàng)建時(shí)間2023-01-01 12:00:00,123
%(levelname)s日志級(jí)別名稱INFO
%(message)s日志消息內(nèi)容程序啟動(dòng)成功
%(name)s記錄器名稱my_logger
%(filename)s生成日志的文件名app.py
%(lineno)d生成日志的行號(hào)42
%(funcName)s生成日志的函數(shù)名main
%(pathname)s生成源文件的完整路徑
%(module)s生成模塊名(文件名去掉 .py)
%(process)d生成進(jìn)程ID
%(thread)d生成線程 ID

3.4 Filter (過濾器)

  • 角色:提供更精細(xì)的日志過濾機(jī)制,可以基于 Logger 名稱、日志級(jí)別或其他屬性進(jìn)行過濾。
  • 使用場(chǎng)景:相對(duì)較少直接使用,LoggerHandler 的級(jí)別通常足夠。但可以用于實(shí)現(xiàn)復(fù)雜邏輯,比如只記錄特定用戶的日志。

3.5 核心組件快速使用示例

import logging

# 1. 獲取一個(gè) Logger 實(shí)例(通常使用模塊名)
logger = logging.getLogger(__name__)

# 2. 設(shè)置 Logger 級(jí)別
logger.setLevel(logging.DEBUG)

# 3. 創(chuàng)建 Handler (例如,輸出到控制臺(tái))
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO) # Handler 級(jí)別

# 4. 創(chuàng)建 Formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)

# 5. 將 Handler 添加到 Logger
logger.addHandler(console_handler)

# 6. 記錄日志
logger.debug("調(diào)試信息")
logger.info("普通信息")
logger.warning("警告信息")
logger.error("錯(cuò)誤信息")
logger.critical("嚴(yán)重錯(cuò)誤")

運(yùn)行結(jié)果:

四、高級(jí)用法與最佳實(shí)踐

1、配置分離:將日志配置獨(dú)立出來(lái)

將配置放在單獨(dú)的文件中,是大型項(xiàng)目的標(biāo)準(zhǔn)做法。推薦使用 dictConfig。

# logging_config.py
import logging
from logging.config import dictConfig
?
LOGGING_CONFIG = {
    "version": 1,
    "disable_existing_loggers": False,  # 避免禁用第三方庫(kù)日志
    "formatters": {
        "detailed": {
            "format": "%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s"
        },
        "simple": {
            "format": "%(name)s - %(levelname)s - %(message)s"
        }
    },
    "handlers": {
        "file": {
            "class": "logging.handlers.RotatingFileHandler", # 輪轉(zhuǎn)文件
            "level": "DEBUG",
            "formatter": "detailed",
            "filename": "app.log",
            "maxBytes": 10485760,  # 10MB
            "backupCount": 5,      # 保留 5 個(gè)備份
            "encoding": "utf-8"
        },
        "console": {
            "class": "logging.StreamHandler",
            "level": "INFO",
            "formatter": "simple"
        }
    },
    "loggers": {
        "myapp": {  # 為你的應(yīng)用定義 logger
            "level": "DEBUG",
            "handlers": ["file", "console"],
            "propagate": False
        }
    }
}
?
dictConfig(LOGGING_CONFIG)
logger = logging.getLogger("myapp") # 創(chuàng)建全局 logger 實(shí)例

在其他模塊中使用:

# main.py
from logging_config import logger
?
logger.info("應(yīng)用啟動(dòng)")

2、RotatingFileHandler 分割日志文件

FileHandler 會(huì)無(wú)限增長(zhǎng)文件。使用 RotatingFileHandlerTimedRotatingFileHandler 可以自動(dòng)管理日志文件大小和數(shù)量。

3、捕獲異常信息

try:
    result = 1 / 0
except Exception as e:
    logger.error("發(fā)生異常", exc_info=True) # exc_info=True 會(huì)自動(dòng)記錄 traceback
    # 或者使用
    # logger.exception("發(fā)生異常") # 等價(jià)于 logger.error(..., exc_info=True)

4、在多模塊項(xiàng)目中使用name

# myapp/utils.py
import logging
logger = logging.getLogger(__name__) # __name__ 是 'myapp.utils'
?
def some_function():
    logger.info("在 utils 模塊中執(zhí)行")

這樣日志會(huì)清晰地顯示來(lái)源 myapp.utils - INFO - 在 utils 模塊中執(zhí)行

5、避免重復(fù)日志

問題:如果 Loggerpropagate=True(默認(rèn))且父 Logger 也有 Handler,日志可能被多次輸出。

解決方案:在配置中為你的應(yīng)用 Logger 設(shè)置 "propagate": False

處理中文FileHandlerRotatingFileHandler 中指定 encoding="utf-8"。

總結(jié)

Python 的 logging 模塊是一個(gè)功能完備、設(shè)計(jì)精良的日志框架。掌握其核心組件(Logger, Handler, Formatter, Filter)的工作原理,是構(gòu)建可靠應(yīng)用的基礎(chǔ)。通過合理的配置(尤其是使用 dictConfig 分離配置),你可以輕松實(shí)現(xiàn):

  • 多環(huán)境適配:開發(fā)時(shí)輸出 DEBUG 信息,生產(chǎn)時(shí)只輸出 WARNING 及以上。
  • 多目標(biāo)輸出:同時(shí)將詳細(xì)日志寫入文件,將關(guān)鍵信息輸出到控制臺(tái)。
  • 結(jié)構(gòu)化日志:包含時(shí)間、位置、級(jí)別等上下文信息,便于排查問題。
  • 可維護(hù)性:配置集中管理,易于調(diào)整。

告別 print,擁抱 logging,讓你的應(yīng)用擁有清晰、可追溯的“生命日志”!

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

相關(guān)文章

  • Python 發(fā)送郵件方法總結(jié)

    Python 發(fā)送郵件方法總結(jié)

    這篇文章主要介紹了Python 發(fā)送郵件的幾種方法,幫助大家更好的理解和學(xué)習(xí)Python,感興趣的朋友可以了解下
    2020-08-08
  • 在Windows中設(shè)置Python環(huán)境變量的實(shí)例講解

    在Windows中設(shè)置Python環(huán)境變量的實(shí)例講解

    下面小編就為大家分享一篇在Windows中設(shè)置Python環(huán)境變量的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-04-04
  • Python實(shí)現(xiàn)讀取文件夾里Excel文件里的數(shù)據(jù)

    Python實(shí)現(xiàn)讀取文件夾里Excel文件里的數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)讀取文件夾里Excel文件里的數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-12-12
  • pycharm中使用request和Pytest進(jìn)行接口測(cè)試的方法

    pycharm中使用request和Pytest進(jìn)行接口測(cè)試的方法

    這篇文章主要介紹了pycharm中使用request和Pytest進(jìn)行接口測(cè)試的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Python根據(jù)Windows窗口截圖的幾種實(shí)現(xiàn)方法

    Python根據(jù)Windows窗口截圖的幾種實(shí)現(xiàn)方法

    文章介紹了Windows下Python截圖的四種方法:PIL庫(kù)(簡(jiǎn)單快速)、win32gui(精準(zhǔn)控制窗口)、mss庫(kù)(跨平臺(tái)高性能)及win32API處理隱藏窗口,需注意窗口標(biāo)題匹配、權(quán)限問題和DPI縮放調(diào)整,推薦常規(guī)截圖用PIL或mss,需精準(zhǔn)控制時(shí)使用win32API,需要的朋友可以參考下
    2025-10-10
  • 使用Python在Excel中創(chuàng)建組合圖的完整指南

    使用Python在Excel中創(chuàng)建組合圖的完整指南

    本文詳細(xì)介紹了如何使用Python和FreeSpire.XLSforPython創(chuàng)建組合圖表,包括柱狀圖和折線圖的設(shè)置,以及如何實(shí)現(xiàn)雙Y軸展示,組合圖適用于兩個(gè)量級(jí)差異較大的指標(biāo)展示,通過雙軸機(jī)制避免數(shù)值比例沖突,便于同時(shí)分析趨勢(shì)和規(guī)模,需要的朋友可以參考下
    2026-03-03
  • 用python生成與調(diào)用cntk模型代碼演示方法

    用python生成與調(diào)用cntk模型代碼演示方法

    今天小編就為大家分享一篇用python生成與調(diào)用cntk模型代碼演示方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-08-08
  • 一文講清Python中文件路徑的基本概念與操作方法

    一文講清Python中文件路徑的基本概念與操作方法

    這篇文章主要為大家詳細(xì)介紹了Python中文件路徑的基本概念與操作方法,其中文件路徑主要分為絕對(duì)路徑(從根目錄開始)和相對(duì)路徑(相對(duì)于當(dāng)前工作目錄),感興趣的小伙伴可以了解下
    2026-04-04
  • python PrettyTable模塊的安裝與簡(jiǎn)單應(yīng)用

    python PrettyTable模塊的安裝與簡(jiǎn)單應(yīng)用

    prettyTable 是一款很簡(jiǎn)潔但是功能強(qiáng)大的第三方模塊,主要是將輸入的數(shù)據(jù)轉(zhuǎn)化為格式化的形式來(lái)輸出,這篇文章主要介紹了python PrettyTable模塊的安裝與簡(jiǎn)單應(yīng)用,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Python matplotlib繪制xkcd動(dòng)漫風(fēng)格的圖表

    Python matplotlib繪制xkcd動(dòng)漫風(fēng)格的圖表

    xkcd是蘭道爾·門羅(Randall Munroe)的網(wǎng)名,又是他所創(chuàng)作的漫畫的名稱。本文將用matplotlib庫(kù)繪制xkcd動(dòng)漫風(fēng)格的圖表,感興趣的可以了解一下
    2022-03-03

最新評(píng)論

彩票| 交口县| 洛扎县| 遂溪县| 邮箱| 通化市| 连城县| 文昌市| 广元市| 安顺市| 扶绥县| 龙川县| 五家渠市| 朝阳区| 扎赉特旗| 河曲县| 城固县| 汶川县| 新建县| 石家庄市| 寿阳县| 同心县| 周口市| 永济市| 惠州市| 汤原县| 刚察县| 易门县| 兴化市| 平南县| 高雄县| 射洪县| 莎车县| 西丰县| 江都市| 湘潭市| 临夏市| 广饶县| 望谟县| 三亚市| 华池县|