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

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

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

前言

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

一、logging 核心架構:4 個核心組件

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

1.1 日志級別(Log Level)

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

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

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

1.2 格式化器(Formatter)

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

1.2.1 常用格式占位符

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

1.2.2 Formatter 基本用法

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

1.3 處理器(Handler)

處理器決定日志的輸出目標(控制臺、文件、網絡等),一個日志器可以綁定多個處理器,實現 “日志同時輸出到控制臺和文件” 的效果。

1.3.1 常用處理器類型

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

1.3.2 Handler 基本用法

# 1. 控制臺處理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)  # 處理器級別(僅輸出≥該級別的日志)
console_handler.setFormatter(formatter)  # 綁定格式化器
# 2. 文件處理器(按大小分割,單個文件最大10MB,保留5個備份)
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 模塊的核心入口,所有日志操作都通過日志器對象完成(而非直接調用 logging.debug () 等全局方法),支持層級繼承(如 logger = logging.getLogger(‘app.db’) 繼承 app 日志器的配置)。

1.4.1 日志器核心操作

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

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

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

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

以下是可直接復制使用的 “生產級” 配置示例,實現:

  1. 日志同時輸出到控制臺(INFO 及以上)和文件(DEBUG 及以上);
  2. 文件日志按大小分割,避免單個文件過大;
  3. 中文無亂碼,格式清晰;
  4. 避免重復輸出日志。
import logging
from logging.handlers import RotatingFileHandler
import os
def setup_logger():
    """配置全局日志器"""
    # 1. 定義日志器名稱(推薦用項目名)
    logger = logging.getLogger('blog_demo')
    # 防止重復添加處理器(多次調用該函數時)
    if logger.handlers:
        return logger
    # 2. 設置日志器全局級別(最低級別,讓處理器過濾)
    logger.setLevel(logging.DEBUG)
    # 禁用日志傳播,避免根日志器重復輸出
    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. 配置控制臺處理器(僅輸出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個備份
        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('這是調試信息,僅輸出到文件')
    logger.info('這是普通信息,控制臺和文件都輸出')
    logger.warning('這是警告信息')
    logger.error('這是錯誤信息')
    logger.critical('這是嚴重錯誤信息')

三、總結

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

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

相關文章

  • Python制作數據分析透視表的方法詳解

    Python制作數據分析透視表的方法詳解

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

    pytorch無法使用GPU問題的解決方法

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

    一文詳細介紹numpy在python中的用法

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

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

    在Python編程中,ZeroDivisionError:divisionbyzero是因為嘗試除以零所導致的常見錯誤,這篇文章詳細介紹了錯誤的原因、解決方案,需要的朋友可以參考下
    2024-09-09
  • Python進程的通信Queue、Pipe實例分析

    Python進程的通信Queue、Pipe實例分析

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

    python函數運行內存時間等性能檢測工具

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

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

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

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

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

    Python 調用Anthropic API 的兩種方式

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

    Python協程實踐分享

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

最新評論

灌南县| 崇文区| 滦平县| 新泰市| 青州市| 牡丹江市| 大荔县| 巴南区| 芦溪县| 宁河县| 连江县| 连平县| 离岛区| 蒙山县| 修文县| 轮台县| 萨迦县| 琼中| 江源县| 蒙城县| 永城市| 灌云县| 新巴尔虎右旗| 抚顺县| 叶城县| 沅陵县| 潍坊市| 静海县| 六盘水市| 黑水县| 防城港市| 潞城市| 泸西县| 呼伦贝尔市| 荣成市| 拉萨市| 尚志市| 湘乡市| 华宁县| 大安市| 纳雍县|