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

python中l(wèi)ogger包的詳細使用教程(附實例代碼)

 更新時間:2025年05月28日 08:26:33   作者:SunkingYang  
Python?logging模塊是標準庫日志工具,支持多級別、多目標、多格式日志管理,這篇文章主要介紹了python中l(wèi)ogger包詳細使用的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

Python 的 logging 模塊是標準庫中用于記錄日志的核心工具,通過靈活配置可實現(xiàn)多級別、多目標、多格式的日志管理。以下是其核心用法及詳細說明:

功能說明

一、Logger 的創(chuàng)建與基礎配置

  • 創(chuàng)建 Logger 實例使用 logging.getLogger(name) 創(chuàng)建或獲取一個 Logger 對象。若未指定名稱,默認返回根 Logger(root)。

    import logging
    logger = logging.getLogger('my_app')  # 創(chuàng)建名為 'my_app' 的 Logger
    
  • 設置日志級別Logger 的級別決定其處理的最低日志等級,可選級別從低到高為:DEBUG、INFO、WARNING、ERRORCRITICAL。

    logger.setLevel(logging.DEBUG)  # 記錄 DEBUG 及以上級別的日志
    
  • 默認級別與繼承關系

    • 若未顯式設置級別,Logger 會繼承父級(如 root)的級別,默認 WARNING。
    • Logger 名稱支持層級結構(如 a.b 繼承 a 的配置),便于模塊化日志管理。

二、Handler 的配置與使用

Handler 負責將日志發(fā)送到不同目標(如文件、控制臺),可同時添加多個 Handler 實現(xiàn)多路輸出。

常用 Handler 類型

Handler功能示例
StreamHandler輸出到控制臺(默認 sys.stderrlogging.StreamHandler()
FileHandler輸出到文件logging.FileHandler('app.log', mode='a')
RotatingFileHandler日志文件按大小回滾(避免文件過大)from logging.handlers import RotatingFileHandler
TimedRotatingFileHandler按時間回滾日志文件(如每天生成新文件)from logging.handlers import TimedRotatingFileHandler

示例:同時輸出到文件和控制臺

# 文件 Handler(按大小回滾)
from logging.handlers import RotatingFileHandler
file_handler = RotatingFileHandler(
    'app.log', maxBytes=1024*1024, backupCount=5  # 單個文件最大1MB,保留5個備份
)
file_handler.setLevel(logging.INFO)

# 控制臺 Handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

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

三、Formatter 自定義日志格式

通過 Formatter 可定義日志輸出的格式,支持占位符如 %(asctime)s(時間)、%(levelname)s(級別)、%(message)s(消息)等。

formatter = logging.Formatter(
    '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'  # 自定義時間格式
)
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

四、記錄不同級別的日志

通過 Logger 對象調用對應級別的方法記錄日志:

logger.debug('調試信息,用于開發(fā)階段追蹤細節(jié)')    # 僅當 Logger 級別 ≤ DEBUG 時輸出
logger.info('常規(guī)信息,如服務啟動')              
logger.warning('潛在問題警告,如參數(shù)缺失')        
logger.error('程序錯誤,但應用仍可運行')          
logger.critical('嚴重錯誤,可能導致程序崩潰')     

五、高級配置與最佳實踐

  • 全局配置快速啟動使用 logging.basicConfig() 快速配置根 Logger,適合簡單場景:

    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(message)s',
        handlers=[logging.FileHandler('app.log'), logging.StreamHandler()]
    )
    
  • 過濾器(Filter)通過 Filter 實現(xiàn)更精細的日志篩選,例如僅記錄特定模塊或包含關鍵字的日志:

    class CustomFilter(logging.Filter):
        def filter(self, record):
            return 'important' in record.getMessage()  # 僅記錄含 'important' 的日志
    
    logger.addFilter(CustomFilter())
    
  • 避免重復日志若 Logger 層級配置不當,可能導致日志重復輸出。建議在子 Logger 中禁用傳播到父級:

    child_logger = logging.getLogger('my_app.sub_module')
    child_logger.propagate = False  # 阻止日志傳遞給父 Logger
    

六、常見問題與調試

  • 日志不顯示:檢查 Logger 和 Handler 的級別是否高于日志調用級別。
  • 多 Handler 沖突:確保每個 Handler 的級別和 Formatter 獨立配置。
  • 性能優(yōu)化:高頻日志場景可使用 RotatingFileHandler 避免文件過大,或異步日志庫(如 concurrent-log-handler)。

以下是 Python 中 logging 模塊的詳細使用教程,涵蓋基礎配置、高級用法及最佳實踐,結合多篇權威資料整理而成:

使用方法

一、基礎配置與快速使用

  • 引入模塊與基礎配置通過 basicConfig() 函數(shù)快速配置全局日志參數(shù):

    import logging
    
    logging.basicConfig(
        level=logging.DEBUG,  # 設置最低日志級別為 DEBUG
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S',  # 時間格式
        filename='app.log',  # 輸出到文件(默認追加模式)
        filemode='w'  # 覆蓋模式寫入文件(可選)
    )
    
  • 記錄不同級別的日志使用預定義的日志級別方法輸出信息:

    logging.debug('調試信息')    # 開發(fā)階段追蹤細節(jié)
    logging.info('常規(guī)狀態(tài)')    # 程序正常運行信息
    logging.warning('潛在問題')  # 如參數(shù)缺失或兼容性問題
    logging.error('錯誤事件')    # 功能異常但程序仍運行
    logging.critical('嚴重故障') # 系統(tǒng)可能崩潰的致命錯誤
    

    注意:只有不低于 level 參數(shù)設置的級別才會被記錄。

二、自定義 Logger 對象

  • 創(chuàng)建獨立 Logger推薦為不同模塊創(chuàng)建獨立 Logger 以分類管理日志:

    logger = logging.getLogger('my_module')  # 名稱建議使用模塊名
    logger.setLevel(logging.INFO)  # 覆蓋全局級別
    
  • 添加處理器(Handler)支持同時輸出到控制臺、文件、網絡等多種目標:

    # 控制臺處理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.DEBUG)
    
    # 文件處理器(按大小輪轉)
    from logging.handlers import RotatingFileHandler
    file_handler = RotatingFileHandler(
        'app.log', maxBytes=10*1024*1024, backupCount=5  # 10MB/文件,保留5個備份
    )
    file_handler.setLevel(logging.ERROR)
    
    # 將處理器附加到 Logger
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)
    
  • 自定義日志格式通過 Formatter 定義日志輸出樣式:

    formatter = logging.Formatter(
        '%(asctime)s [%(levelname)s] %(module)s:%(lineno)d - %(message)s',
        datefmt='%H:%M:%S'
    )
    console_handler.setFormatter(formatter)
    file_handler.setFormatter(formatter)
    

三、高級用法

  • 配置文件管理使用 .conf 或 .ini 文件分離配置(推薦大型項目):

    import logging.config
    
    logging.config.fileConfig('logging.conf')
    

    示例 logging.conf 內容

    [loggers]
    keys=root,my_app
    
    [handlers]
    keys=consoleHandler,fileHandler
    
    [formatters]
    keys=simpleFormatter
    
    [logger_root]
    level=DEBUG
    handlers=consoleHandler
    
    [logger_my_app]
    level=INFO
    handlers=fileHandler
    qualname=my_app
    propagate=0  # 禁止傳播到父級 Logger
    
  • 日志傳播控制通過 propagate 屬性控制是否向父級 Logger 傳遞日志:

    child_logger = logging.getLogger('parent.child')
    child_logger.propagate = False  # 僅當前 Logger 處理日志
    
  • 過濾器(Filter)實現(xiàn)精細化日志篩選:

    class KeywordFilter(logging.Filter):
        def __init__(self, keyword):
            super().__init__()
            self.keyword = keyword
    
        def filter(self, record):
            return self.keyword in record.getMessage()
    
    logger.addFilter(KeywordFilter('重要'))
    

四、最佳實踐與注意事項

  • 性能優(yōu)化

    • 避免高頻日志調用:使用 isEnabledFor() 檢查級別后再記錄:
      if logger.isEnabledFor(logging.DEBUG):
          logger.debug(f'耗時計算: {expensive_function()}')
      
    • 使用異步日志庫(如 concurrent-log-handler)處理高并發(fā)場景。
  • 多環(huán)境配置根據運行環(huán)境動態(tài)調整配置:

    if os.getenv('ENV') == 'production':
        logger.setLevel(logging.WARNING)
    else:
        logger.setLevel(logging.DEBUG)
    
  • 錯誤處理為關鍵操作添加異常捕獲并記錄堆棧:

    try:
        risky_operation()
    except Exception as e:
        logger.exception('操作失敗: %s', e)  # 自動記錄堆棧跟蹤
    

五、實際應用場景示例

網絡請求監(jiān)控

import requests

def fetch_data(url):
    try:
        response = requests.get(url, timeout=5)
        response.raise_for_status()
        logger.info(f'成功獲取 {url} 數(shù)據')
        return response.json()
    except requests.RequestException as e:
        logger.error(f'請求失敗: {url} - {str(e)}')
        return None

通過合理配置 Logger、Handler 和 Formatter,可以構建靈活高效的日志系統(tǒng)。更多高級功能(如遠程日志、郵件通知)可參考 Python 官方文檔

總結

到此這篇關于python中l(wèi)ogger包詳細使用的文章就介紹到這了,更多相關python logger包使用教程內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Python開啟線程和線程池的方法

    詳解Python開啟線程和線程池的方法

    這篇文章主要介紹了Python開啟線程和線程池的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-03-03
  • python 爬蟲之selenium可視化爬蟲的實現(xiàn)

    python 爬蟲之selenium可視化爬蟲的實現(xiàn)

    這篇文章主要介紹了python 爬蟲之selenium可視化爬蟲的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Python 一鍵制作微信好友圖片墻的方法

    Python 一鍵制作微信好友圖片墻的方法

    這篇文章主要介紹了Python 一鍵制作微信好友圖片墻的方法,有兩種方法,每種方法給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • 在不同系統(tǒng)間遷移Python程序的方法與教程

    在不同系統(tǒng)間遷移Python程序的方法與教程

    本文介紹了幾種將Windows上編寫的Python程序遷移到Linux服務器上的方法,包括使用虛擬環(huán)境和依賴凍結、容器化技術(如Docker)、使用Anaconda環(huán)境以及遠程桌面連接和配置(作為臨時方案),通過這些方法,可以有效地解決環(huán)境搭建和依賴安裝問題
    2025-02-02
  • Django的開發(fā)步驟原來是這樣的

    Django的開發(fā)步驟原來是這樣的

    這篇文章主要為大家詳細介紹了Django的開發(fā)步驟,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • matplotlib交互式數(shù)據光標mpldatacursor的實現(xiàn)

    matplotlib交互式數(shù)據光標mpldatacursor的實現(xiàn)

    這篇文章主要介紹了matplotlib交互式數(shù)據光標mpldatacursor的實現(xiàn) ,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Python調用系統(tǒng)底層API播放wav文件的方法

    Python調用系統(tǒng)底層API播放wav文件的方法

    這篇文章主要介紹了Python調用系統(tǒng)底層API播放wav文件的方法,涉及Python使用pywin32調用系統(tǒng)底層API讀取與播放wav文件的相關操作技巧,需要的朋友可以參考下
    2017-08-08
  • 9種python web 程序的部署方式小結

    9種python web 程序的部署方式小結

    python有很多web 開發(fā)框架,代碼寫完了,部署上線是個大事,通常來說,web應用一般是三層結構web server ---->application -----> DB server
    2014-06-06
  • python編碼總結(編碼類型、格式、轉碼)

    python編碼總結(編碼類型、格式、轉碼)

    這篇文章主要介紹了python編碼操作,包括編碼類型、格式、轉碼等,并結合實例分析了相關操作技巧與注意事項,需要的朋友可以參考下
    2016-07-07
  • python聚類算法解決方案(rest接口/mpp數(shù)據庫/json數(shù)據/下載圖片及數(shù)據)

    python聚類算法解決方案(rest接口/mpp數(shù)據庫/json數(shù)據/下載圖片及數(shù)據)

    這篇文章主要介紹了python聚類算法解決方案(rest接口/mpp數(shù)據庫/json數(shù)據/下載圖片及數(shù)據),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08

最新評論