Python logging模塊使用指南

在這里插入圖片描述

Python 的 logging 模塊是一個靈活且強大的日志記錄工具,廣泛應用于應用程序的調試、運行監控和問題排查。它提供了豐富的功能,包括多級日志記錄、多種輸出方式、靈活的格式配置等。以下是詳細介紹:


一、為什么使用 logging 模塊?

  • 替代 printprint 語句僅適合簡單調試,而 logging 支持持久化、級別控制、異步寫入等。
  • 分級日志:根據重要性區分日志(如 DEBUG、INFO、ERROR),便于過濾信息。
  • 靈活輸出:可同時輸出到控制臺、文件、網絡等。
  • 線程安全:適用于多線程/多進程環境。

二、核心組件

  1. Logger(記錄器)
    應用程序直接調用的接口,負責產生日志。

    • 通過 logging.getLogger(name) 獲取或創建 Logger 實例。
    • 支持層級結構(如 'parent.child' 繼承父級配置)。
  2. Handler(處理器)
    決定日志的輸出位置(如控制臺、文件、郵件等)。

    • 常用 Handler:
      • StreamHandler:輸出到流(如控制臺)。
      • FileHandler:輸出到文件。
      • RotatingFileHandler:按大小滾動日志文件。
      • TimedRotatingFileHandler:按時間滾動日志文件。
      • SMTPHandler:發送郵件。
  3. Filter(過濾器)
    提供更細粒度的日志過濾(如僅記錄特定關鍵詞的日志)。

  4. Formatter(格式器)
    定義日志的輸出格式(時間、級別、消息等)。

    • 常用格式字段:
      '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
      

三、日志級別

從低到高共 6 個級別(低于設定級別的日志將被忽略):

級別數值說明
DEBUG10詳細調試信息
INFO20程序正常運行信息
WARNING30潛在問題,但程序仍運行
ERROR40嚴重錯誤,影響部分功能
CRITICAL50致命錯誤,可能導致程序終止

四、基本使用步驟

  1. 創建 Logger

    import logginglogger = logging.getLogger(__name__)  # 推薦使用模塊名作為Logger名稱
    logger.setLevel(logging.DEBUG)        # 設置記錄的最低級別
    
  2. 配置 Handler 和 Formatter

    # 創建控制臺 Handler
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.WARNING)  # 控制臺只輸出 WARNING 及以上級別# 創建文件 Handler
    file_handler = logging.FileHandler('app.log')
    file_handler.setLevel(logging.DEBUG)      # 文件記錄所有 DEBUG 及以上級別# 定義 Formatter
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    console_handler.setFormatter(formatter)
    file_handler.setFormatter(formatter)# 將 Handler 添加到 Logger
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)
    
  3. 記錄日志

    logger.debug('Debug 信息')
    logger.info('程序啟動')
    logger.warning('磁盤空間不足')
    logger.error('請求超時')
    

五、快速配置(basicConfig

適用于簡單場景的快速配置:

import logginglogging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s',handlers=[logging.FileHandler('app.log'),logging.StreamHandler()]
)logging.warning('警告信息')

六、高級用法

  1. 配置文件或字典
    使用 logging.config 模塊通過文件或字典配置:

    import logging.configconfig = {'version': 1,'formatters': {'default': {'format': '%(asctime)s - %(levelname)s - %(message)s'}},'handlers': {'console': {'class': 'logging.StreamHandler','formatter': 'default','level': 'DEBUG'}},'root': {'handlers': ['console'],'level': 'INFO'}
    }logging.config.dictConfig(config)
    
  2. 捕獲異常信息
    使用 logger.exception 記錄異常堆棧:

    try:1 / 0
    except Exception:logger.exception('發生異常:')
    
  3. 日志傳播
    子 Logger 默認將日志傳遞給父 Logger。可通過 logger.propagate = False 關閉。


七、常見問題

  1. 重復日志
    原因:多次添加 Handler 或 basicConfig 被多次調用。
    解決:確保 Handler 只添加一次,或在 basicConfig 中設置 force=True

  2. 性能優化
    避免在高頻代碼中記錄低級別日志(如 DEBUG),可預先檢查級別:

    if logger.isEnabledFor(logging.DEBUG):logger.debug(f'耗時操作: {time_consuming()}')
    

八、總結

logging 模塊通過靈活的配置和分級機制,滿足了從簡單到復雜的日志需求。掌握其核心組件(Logger、Handler、Formatter)和級別控制,能顯著提升程序的可維護性。建議在項目中替代 print,合理利用日志進行調試和監控。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905710.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905710.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905710.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開發技術.前端開發相關問題

第一部分 響應式布局 1. 幾個布局單位概念 PX: px像素(Pixel) 相對長度單位。像素px是相對于顯示器屏幕分辨率而言的。 PX特點 1. IE無法調整那些使用px作為單位的字體大小; 2. 國外的大部分網站能夠調整的原因在于其使用了em或rem作為字體…

1. Go 語言環境安裝

👑 博主簡介:高級開發工程師 👣 出沒地點:北京 💊 人生目標:自由 ——————————————————————————————————————————— 版權聲明:本文為原創文章&#xf…

WPF自定義控件開發全指南:多內容切換與動畫集成

WPF自定義控件開發全指南:多內容切換與動畫集成 一、控件基礎架構設計1.1 選擇控件基類1.2 定義關鍵屬性 二、動畫系統集成2.1 淡入淡出動畫實現2.2 滑動動畫實現 三、視覺狀態管理四、完整使用示例4.1 XAML聲明4.2 動畫觸發邏輯 五、擴展與優化5.1 性能優化建議5.2…

數據結構 -- 順序查找和折半查找

查找的基本概念 基本概念 查找:在數據集合中尋找滿足某種條件的數據元素的過程 查找表(查找結構):用于查找的數據集合稱為查找表,它由同一類型的數據結構元素(或記錄)組成 關鍵字&#xff1…

汽車功能安全--TC3xx MBIST設計要點

英飛凌針對硬件故障的自測,提供了四種機制:PBIST、LBIST、MONBIST和MBIST。 LBIST和MONBIST我們已經聊過了,今天就快速介紹下MBIST。 MBIST,全程Memory Built-in Self Test,用于檢測SRAM數據單元的完整性。 在26262…

openpi 入門教程

系列文章目錄 目錄 系列文章目錄 前言 一、運行要求 二、安裝 三、模型檢查點 3.1 基礎模型 3.2 微調模型 四、運行預訓練模型的推理 五、在自己的數據上微調基礎模型 5.1. 將數據轉換為 LeRobot 數據集 5.3. 啟動策略服務器并運行推理 5.4 更多示例 六、故障排除…

java加強 -Collection集合

集合是一種容器,類似于數組,但集合的大小可變,開發中也非常常用。Collection代表單列集合,每個元素(數據)只包含1個值。Collection集合分為兩類,List集合與set集合。 特點 List系列集合&#…

深入理解ThingsBoard的Actor模型

1、ThingsBoard系統中定義了哪些Actor ? ThingsBoard Actor 創建機制與作用對照表: Actor 類型 何時創建 由誰創建 是否緩存 作用描述 SystemActor 系統啟動時 DefaultActorService / ActorSystem ? 是 ★ ThingsBoard 平臺服務級別管理器:負責創建所有的Actor AppActor

WPS一旦打開,就會修改默認打開方式,怎么解?

目錄 前言 解決方法 結語 前言 電腦上同時存在WPS和微軟的Office全家桶,但是我更喜歡用Office全家桶。前幾天剛在設置改過來,忘記更改pdf文件打開默認應用。結果沒過幾天,不小心用WPS打開pdf文件時候,給我把默認設置全改回去了…

深度學習中--模型調試與可視化

第一部分:損失函數與準確率的監控(Loss / Accuracy Curve) 1. 為什么要監控 Loss 與 Accuracy? Loss 是模型優化的依據,但它可能下降了 Accuracy 反而沒變(過擬合信號) Accuracy 才是評估效果的…

中間件-RocketMQ

RocketMQ 基本架構消息模型消費者消費消息模式順序消息機制延遲消息批量消息事務消息消息重試最佳實踐 基本架構 nameServer: 維護broker列表信息,客戶端連接時只需要連接nameServer。可配置成集群。 broker:broker分為master和slave,master負…

anaconda3如何切換虛擬環境

在 Anaconda3 中切換虛擬環境可以通過 命令行 或 Anaconda Navigator 圖形界面實現。以下是詳細步驟: 方法1:通過命令行切換(推薦) 1. 查看所有虛擬環境 conda env list # 或 conda info --envs 輸出示例: base …

【vue】axios網絡請求介紹

一、基礎使用 1.引入js文件 2.在methods中的函數里寫 axios.get(路徑) .then((res))>{ console.log(res.data);//控制臺打印結果數據 this.listArrres.data//定義數組來接收返回來的數據 }) 二、參數傳遞 參數傳遞一般在路徑后面使用 params:{ num:2,…

機器學習 --- KNN算法

機器學習 — KNN算法 文章目錄 機器學習 --- KNN算法一,sklearn機器學習概述二,KNN算法---分類2.1樣本距離判斷2.2 KNN算法原理2.3 KNN缺點2.4 API2.5 使用sklearn中鳶尾花數據集實現KNN 一,sklearn機器學習概述 獲取數據、數據處理、特征工…

Spring Boot 中的重試機制

Retryable 注解簡介 Retryable 注解是 Spring Retry 模塊提供的,用于自動重試可能會失敗的方法。在微服務架構和分布式系統中,服務之間的調用可能會因為網絡問題、服務繁忙等原因失敗。使用 Retryable 可以提高應用的穩定性和容錯能力 1。 使用步驟 &…

FPGA生成隨機數的方法

FPGA生成隨機數的方法,目前有以下幾種: 1、震蕩采樣法 實現方式一:通過低頻時鐘作為D觸發器的時鐘輸入端,高頻時鐘作為D觸發器的數據輸入端,使用高頻采樣低頻,利用亞穩態輸出隨機數。 實現方式二:使用三個…

(五)毛子整潔架構(分布式日志/Redis緩存/OutBox Pattern)

文章目錄 項目地址一、結構化日志1.1 使用Serilog1. 安裝所需要的包2. 注冊服務和配置3. 安裝Seq服務 1.2 添加分布式id中間件1. 添加中間件2. 注冊服務3. 修改Application的LoggingBehavior 二、Redis緩存2.1 添加緩存1. 創建接口ICaching接口2. 實現ICaching接口3. 注冊Cachi…

Vue.js 全局導航守衛:深度解析與應用

在 Vue.js 開發中,導航守衛是一項極為重要的功能,它為開發者提供了對路由導航過程進行控制的能力。其中,全局導航守衛更是在整個應用的路由切換過程中發揮著關鍵作用。本文將深入探討全局導航守衛的分類、作用以及參數等方面內容。 一、全局…

使用FastAPI和React以及MongoDB構建全棧Web應用05 FastAPI快速入門

一、FastAPI概述 1.1 什么是FastAPI FastAPI is a modern, high-performance Python web framework designed for building APIs. It’s rapidly gaining popularity due to its ease of use, speed, and powerful features. Built on top of Starlette, FastAPI leverages a…

如何查看打開的 git bash 窗口是否是管理員權限打開

在 git bash 中輸入: net session >nul 2>&1 && (echo Ok) || (echo Failed) 顯示 OK 》是管理員權限; 顯示 Failed 》不是管理員權限。 如何刪除此步生成的垃圾文件: 新建一個 .txt 文件,輸入以下代碼…