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

Python logging 模塊的原理和常用配置

 更新時(shí)間:2026年02月24日 11:01:32   作者:勇往直前plus  
在 程序開發(fā)中,日志是調(diào)試、監(jiān)控、問題排查的核心工具,而在python程序開發(fā)中,內(nèi)置的logging模塊是處理日志的首選方案,本文介紹Python logging模塊的原理和常用配置,感興趣的朋友跟隨小編一起看看吧

前言

在 程序開發(fā)中,日志是調(diào)試、監(jiān)控、問題排查的核心工具,而在python程序開發(fā)中,內(nèi)置的 logging 模塊是處理日志的首選方案。這篇博客主要匯總和總結(jié)logging模塊的原理和常用配置。

一、logging 核心架構(gòu):4 個(gè)核心組件

logging 模塊的設(shè)計(jì)遵循 “分層解耦” 思想,核心由 4 個(gè)組件(日志級(jí)別、格式化器、處理器、日志器)構(gòu)成,理解它們就能靈活配置日志。

1.1 日志級(jí)別(Log Level)

日志級(jí)別用于區(qū)分日志的重要程度,logging 模塊內(nèi)置了 5 個(gè)核心級(jí)別(按嚴(yán)重程度從低到高)

級(jí)別名稱數(shù)值適用場(chǎng)景
DEBUG10調(diào)試信息,如變量值、函數(shù)執(zhí)行步驟,僅開發(fā) / 測(cè)試環(huán)境使用
INFO20正常運(yùn)行信息,如程序啟動(dòng)、任務(wù)完成,記錄關(guān)鍵流程
WARNING30警告信息,如非致命錯(cuò)誤、不規(guī)范使用,程序仍可運(yùn)行
ERROR40錯(cuò)誤信息,如功能執(zhí)行失敗、數(shù)據(jù)處理異常,影響部分功能
CRITICAL50嚴(yán)重錯(cuò)誤,如程序崩潰、核心資源不可用,需立即處理

核心規(guī)則:只有日志級(jí)別 ≥ 日志器設(shè)置的級(jí)別時(shí),日志才會(huì)被輸出。例如日志器級(jí)別設(shè)為 INFO,那么 DEBUG 級(jí)別的日志會(huì)被過濾,INFO 及以上級(jí)別會(huì)被保留。

1.2 格式化器(Formatter)

格式化器用于定義日志輸出的格式,控制日志中包含哪些信息(如時(shí)間、級(jí)別、模塊、內(nèi)容等),核心是通過格式字符串配置。

1.2.1 常用格式占位符

占位符含義
%(asctime)s日志記錄的時(shí)間(默認(rèn)格式:2026-02-23 10:00:00,123)
%(name)s日志器的名稱
%(levelname)s日志級(jí)別名稱(如 INFO/ERROR)
%(levelno)s日志級(jí)別對(duì)應(yīng)的數(shù)值
%(filename)s日志所在的文件名(不含路徑)
%(funcName)s日志所在的函數(shù)名
%(lineno)d日志所在的行號(hào)
%(message)s日志的具體內(nèi)容(必選)
%(process)d進(jìn)程 ID
%(thread)d線程 ID

1.2.2 Formatter 基本用法

import logging
# 創(chuàng)建格式化器:自定義輸出格式 + 時(shí)間格式
formatter = logging.Formatter(
    fmt='%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'  # 自定義時(shí)間格式,可選
)

1.3 處理器(Handler)

處理器決定日志的輸出目標(biāo)(控制臺(tái)、文件、網(wǎng)絡(luò)等),一個(gè)日志器可以綁定多個(gè)處理器,實(shí)現(xiàn) “日志同時(shí)輸出到控制臺(tái)和文件” 的效果。

1.3.1 常用處理器類型

處理器類作用核心參數(shù)
StreamHandler輸出到控制臺(tái)(stdout/stderr)stream:指定輸出流(默認(rèn) sys.stderr)
FileHandler輸出到文件(覆蓋 / 追加)filename:文件路徑;mode:模式(默認(rèn) ‘a’ 追加)
RotatingFileHandler按文件大小分割日志maxBytes:?jiǎn)蝹€(gè)文件最大字節(jié);backupCount:保留備份數(shù)
TimedRotatingFileHandler按時(shí)間分割日志when:分割單位(S/ M/ H/ D/ W0-W6/midnight);interval:間隔;backupCount:保留備份數(shù)
SMTPHandler發(fā)送日志到郵箱mailhost/fromaddr/ toaddrs/subject/ credentials:郵箱配置

1.3.2 Handler 基本用法

# 1. 控制臺(tái)處理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)  # 處理器級(jí)別(僅輸出≥該級(jí)別的日志)
console_handler.setFormatter(formatter)  # 綁定格式化器
# 2. 文件處理器(按大小分割,單個(gè)文件最大10MB,保留5個(gè)備份)
from logging.handlers import RotatingFileHandler
file_handler = RotatingFileHandler(
    filename='app.log',
    maxBytes=10*1024*1024,  # 10MB
    backupCount=5,
    encoding='utf-8'  # 避免中文亂碼
)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)

1.4 日志器(Logger)

日志器是 logging 模塊的核心入口,所有日志操作都通過日志器對(duì)象完成(而非直接調(diào)用 logging.debug () 等全局方法),支持層級(jí)繼承(如 logger = logging.getLogger(‘app.db’) 繼承 app 日志器的配置)。

1.4.1 日志器核心操作

# 1. 獲取日志器(推薦使用模塊名/項(xiàng)目名作為名稱,避免全局沖突)
logger = logging.getLogger('my_blog_app')
# 2. 設(shè)置日志器級(jí)別(全局過濾,優(yōu)先級(jí)最高)
logger.setLevel(logging.DEBUG)
# 3. 綁定處理器(可綁定多個(gè))
logger.addHandler(console_handler)
logger.addHandler(file_handler)
# 4. 禁用日志傳播(避免子日志器的日志被父日志器重復(fù)處理)
logger.propagate = False
# 5. 輸出日志
logger.debug('調(diào)試信息:數(shù)據(jù)庫(kù)連接參數(shù)')
logger.info('正常信息:用戶登錄成功')
logger.warning('警告信息:密碼復(fù)雜度不足')
logger.error('錯(cuò)誤信息:接口調(diào)用失敗')
logger.critical('嚴(yán)重錯(cuò)誤:數(shù)據(jù)庫(kù)連接中斷')

1.4.2 日志器層級(jí)規(guī)則

  • 日志器名稱以 . 分隔表示層級(jí),如 app → app.db → app.db.mysql;
  • 子日志器默認(rèn)繼承父日志器的級(jí)別、處理器、格式化器;
  • 若子日志器單獨(dú)設(shè)置了級(jí)別 / 處理器,則優(yōu)先使用自身配置。

二、常見的 logging 組合配置(可直接復(fù)用)

以下是可直接復(fù)制使用的 “生產(chǎn)級(jí)” 配置示例,實(shí)現(xiàn):

  1. 日志同時(shí)輸出到控制臺(tái)(INFO 及以上)和文件(DEBUG 及以上);
  2. 文件日志按大小分割,避免單個(gè)文件過大;
  3. 中文無(wú)亂碼,格式清晰;
  4. 避免重復(fù)輸出日志。
import logging
from logging.handlers import RotatingFileHandler
import os
def setup_logger():
    """配置全局日志器"""
    # 1. 定義日志器名稱(推薦用項(xiàng)目名)
    logger = logging.getLogger('blog_demo')
    # 防止重復(fù)添加處理器(多次調(diào)用該函數(shù)時(shí))
    if logger.handlers:
        return logger
    # 2. 設(shè)置日志器全局級(jí)別(最低級(jí)別,讓處理器過濾)
    logger.setLevel(logging.DEBUG)
    # 禁用日志傳播,避免根日志器重復(fù)輸出
    logger.propagate = False
    # 3. 創(chuàng)建格式化器
    formatter = logging.Formatter(
        fmt='%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S',
        encoding='utf-8'
    )
    # 4. 配置控制臺(tái)處理器(僅輸出INFO及以上)
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)
    console_handler.setFormatter(formatter)
    # 5. 配置文件處理器(輸出DEBUG及以上,按大小分割)
    # 確保日志目錄存在
    log_dir = 'logs'
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)
    file_handler = RotatingFileHandler(
        filename=os.path.join(log_dir, 'app.log'),
        maxBytes=5*1024*1024,  # 5MB
        backupCount=10,        # 保留10個(gè)備份
        encoding='utf-8'       # 中文編碼
    )
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(formatter)
    # 6. 綁定處理器到日志器
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)
    return logger
# 使用示例
if __name__ == '__main__':
    logger = setup_logger()
    logger.debug('這是調(diào)試信息,僅輸出到文件')
    logger.info('這是普通信息,控制臺(tái)和文件都輸出')
    logger.warning('這是警告信息')
    logger.error('這是錯(cuò)誤信息')
    logger.critical('這是嚴(yán)重錯(cuò)誤信息')

三、總結(jié)

  1. 核心層級(jí):日志器(Logger)是入口,處理器(Handler)決定輸出目標(biāo),格式化器(Formatter)定義輸出格式,日志級(jí)別控制日志過濾規(guī)則;
  2. 關(guān)鍵規(guī)則:日志器級(jí)別是全局過濾,處理器級(jí)別是局部過濾,只有日志級(jí)別同時(shí)≥兩者才會(huì)輸出;
  3. 實(shí)用配置:生產(chǎn)環(huán)境建議同時(shí)配置控制臺(tái)(INFO 級(jí))和文件(DEBUG 級(jí))處理器,結(jié)合日志分割(按大小 / 時(shí)間)避免文件過大,且禁用日志傳播防止重復(fù)輸出。

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

相關(guān)文章

  • Python制作數(shù)據(jù)分析透視表的方法詳解

    Python制作數(shù)據(jù)分析透視表的方法詳解

    透視表是一種可以對(duì)數(shù)據(jù)動(dòng)態(tài)排布并且分類匯總的表格格式,在常用的python的數(shù)據(jù)分析非標(biāo)準(zhǔn)庫(kù)pandas中體現(xiàn)為pivot_table模塊。本文主要介紹了如何實(shí)現(xiàn)制作數(shù)據(jù)分析透視表,需要的可以參考一下
    2022-09-09
  • pytorch無(wú)法使用GPU問題的解決方法

    pytorch無(wú)法使用GPU問題的解決方法

    這篇文章主要介紹了如何解決pytorch 無(wú)法使用GPU 的問題,文中通過代碼和圖文給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • 一文詳細(xì)介紹numpy在python中的用法

    一文詳細(xì)介紹numpy在python中的用法

    這篇文章主要介紹了numpy在python中的用法,NumPy是Python科學(xué)計(jì)算庫(kù),主要用于處理大型多維數(shù)組和矩陣運(yùn)算,它提供了多種函數(shù)進(jìn)行數(shù)組操作,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • Python成功解決ZeroDivisionError:?division?by?zero的方法過程

    Python成功解決ZeroDivisionError:?division?by?zero的方法過程

    在Python編程中,ZeroDivisionError:divisionbyzero是因?yàn)閲L試除以零所導(dǎo)致的常見錯(cuò)誤,這篇文章詳細(xì)介紹了錯(cuò)誤的原因、解決方案,需要的朋友可以參考下
    2024-09-09
  • Python進(jìn)程的通信Queue、Pipe實(shí)例分析

    Python進(jìn)程的通信Queue、Pipe實(shí)例分析

    這篇文章主要介紹了Python進(jìn)程的通信Queue、Pipe,結(jié)合實(shí)例形式分析了Python進(jìn)程通信Queue、Pipe基本概念、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • python函數(shù)運(yùn)行內(nèi)存時(shí)間等性能檢測(cè)工具

    python函數(shù)運(yùn)行內(nèi)存時(shí)間等性能檢測(cè)工具

    這篇文章主要為大家介紹了python函數(shù)運(yùn)行內(nèi)存時(shí)間等性能檢測(cè)工具,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python包管理工具pip的使用完全指南

    Python包管理工具pip的使用完全指南

    pip是Python生態(tài)系統(tǒng)的基石,作為Python的官方包管理工具,它讓python包管理變得簡(jiǎn)單輕松,這篇文章將詳細(xì)介紹pip的各方面用法,希望對(duì)大家有所幫助
    2025-07-07
  • Python打開文件、文件讀寫操作、with方式、文件常用函數(shù)實(shí)例分析

    Python打開文件、文件讀寫操作、with方式、文件常用函數(shù)實(shí)例分析

    這篇文章主要介紹了Python打開文件、文件讀寫操作、with方式、文件常用函數(shù),結(jié)合實(shí)例形式分析了Python文件的打開、讀寫及常用文件操作函數(shù)使用技巧,需要的朋友可以參考下
    2020-01-01
  • Python 調(diào)用Anthropic API 的兩種方式

    Python 調(diào)用Anthropic API 的兩種方式

    本文介紹了Python調(diào)用Anthropic API的兩種主要方式,包括使用requests庫(kù)和官方SDK,下面就來詳細(xì)的介紹一下具體調(diào)用方法,感興趣的可以了解一下
    2025-12-12
  • Python協(xié)程實(shí)踐分享

    Python協(xié)程實(shí)踐分享

    這篇文章主要分享的是Python協(xié)程實(shí)踐,協(xié)程簡(jiǎn)單來說就是一個(gè)更加輕量級(jí)的線程,并且不由操作系統(tǒng)內(nèi)核管理,完全由程序所控制,下文相關(guān)介紹需要的朋友可以參考一下
    2022-05-05

最新評(píng)論

临洮县| 吉安市| 阿勒泰市| 海门市| 阿拉尔市| 丹阳市| 禄劝| 隆尧县| 淳化县| 冷水江市| 广宁县| 繁昌县| 二连浩特市| 苏尼特右旗| 湖州市| 呼和浩特市| 礼泉县| 海盐县| 淮阳县| 南投县| 兴文县| 呼玛县| 阿尔山市| 定安县| 博客| 贵溪市| 望江县| 昭通市| 油尖旺区| 抚顺市| 英德市| 汨罗市| 浙江省| 昆明市| 屏东县| 甘泉县| 谷城县| 东丽区| 浮山县| 嫩江县| 平山县|