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

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

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

前言

Python 的 logging 模塊是標(biāo)準(zhǔn)庫(kù)中用于記錄日志的核心工具,通過(guò)靈活配置可實(shí)現(xiàn)多級(jí)別、多目標(biāo)、多格式的日志管理。以下是其核心用法及詳細(xì)說(shuō)明:

功能說(shuō)明

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

  • 創(chuàng)建 Logger 實(shí)例使用 logging.getLogger(name) 創(chuàng)建或獲取一個(gè) Logger 對(duì)象。若未指定名稱(chēng),默認(rèn)返回根 Logger(root)。

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

    logger.setLevel(logging.DEBUG)  # 記錄 DEBUG 及以上級(jí)別的日志
    
  • 默認(rèn)級(jí)別與繼承關(guān)系

    • 若未顯式設(shè)置級(jí)別,Logger 會(huì)繼承父級(jí)(如 root)的級(jí)別,默認(rèn) WARNING
    • Logger 名稱(chēng)支持層級(jí)結(jié)構(gòu)(如 a.b 繼承 a 的配置),便于模塊化日志管理。

二、Handler 的配置與使用

Handler 負(fù)責(zé)將日志發(fā)送到不同目標(biāo)(如文件、控制臺(tái)),可同時(shí)添加多個(gè) Handler 實(shí)現(xiàn)多路輸出。

常用 Handler 類(lèi)型

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

示例:同時(shí)輸出到文件和控制臺(tái)

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

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

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

三、Formatter 自定義日志格式

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

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

四、記錄不同級(jí)別的日志

通過(guò) Logger 對(duì)象調(diào)用對(duì)應(yīng)級(jí)別的方法記錄日志:

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

五、高級(jí)配置與最佳實(shí)踐

  • 全局配置快速啟動(dòng)使用 logging.basicConfig() 快速配置根 Logger,適合簡(jiǎn)單場(chǎng)景:

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

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

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

六、常見(jiàn)問(wèn)題與調(diào)試

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

以下是 Python 中 logging 模塊的詳細(xì)使用教程,涵蓋基礎(chǔ)配置、高級(jí)用法及最佳實(shí)踐,結(jié)合多篇權(quán)威資料整理而成:

使用方法

一、基礎(chǔ)配置與快速使用

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

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

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

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

二、自定義 Logger 對(duì)象

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

    logger = logging.getLogger('my_module')  # 名稱(chēng)建議使用模塊名
    logger.setLevel(logging.INFO)  # 覆蓋全局級(jí)別
    
  • 添加處理器(Handler)支持同時(shí)輸出到控制臺(tái)、文件、網(wǎng)絡(luò)等多種目標(biāo):

    # 控制臺(tái)處理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.DEBUG)
    
    # 文件處理器(按大小輪轉(zhuǎn))
    from logging.handlers import RotatingFileHandler
    file_handler = RotatingFileHandler(
        'app.log', maxBytes=10*1024*1024, backupCount=5  # 10MB/文件,保留5個(gè)備份
    )
    file_handler.setLevel(logging.ERROR)
    
    # 將處理器附加到 Logger
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)
    
  • 自定義日志格式通過(guò) 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)
    

三、高級(jí)用法

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

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

    示例 logging.conf 內(nèi)容

    [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  # 禁止傳播到父級(jí) Logger
    
  • 日志傳播控制通過(guò) propagate 屬性控制是否向父級(jí) Logger 傳遞日志:

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

    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('重要'))
    

四、最佳實(shí)踐與注意事項(xiàng)

  • 性能優(yōu)化

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

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

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

五、實(shí)際應(yīng)用場(chǎng)景示例

網(wǎng)絡(luò)請(qǐng)求監(jiān)控

import requests

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

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

總結(jié)

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

相關(guān)文章

  • PyQt5使用mimeData實(shí)現(xiàn)拖拽事件教程示例解析上

    PyQt5使用mimeData實(shí)現(xiàn)拖拽事件教程示例解析上

    這篇文章主要為大家介紹了PyQt中如何使用mimeData實(shí)現(xiàn)拖拽事件的示例解析過(guò)程,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • python 制作網(wǎng)站篩選工具(附源碼)

    python 制作網(wǎng)站篩選工具(附源碼)

    平常工作生活中,boos可能會(huì)給我們很多網(wǎng)站取提取信息,這些網(wǎng)站有的無(wú)法響應(yīng),有的404,有的501…真的需要所有網(wǎng)站都訪問(wèn)再提取信息嗎?今天寫(xiě)一個(gè)小工具用于篩選網(wǎng)站中能訪問(wèn)的網(wǎng)站,在此僅舉一例,即狀態(tài)碼為200。
    2021-01-01
  • python3操作注冊(cè)表的方法(Url protocol)

    python3操作注冊(cè)表的方法(Url protocol)

    使用python操作注冊(cè)表的方法最近學(xué)習(xí)了一下,現(xiàn)在做一下筆記,由于對(duì)Python語(yǔ)言的使用還不是很熟練,所以寫(xiě)不出高大上的結(jié)構(gòu)
    2020-02-02
  • 如何使用Python破解ZIP或RAR壓縮文件密碼

    如何使用Python破解ZIP或RAR壓縮文件密碼

    這篇文章主要介紹了如何使用Python破解ZIP或RAR壓縮文件密碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • PyTorch平方根報(bào)錯(cuò)的處理方案

    PyTorch平方根報(bào)錯(cuò)的處理方案

    這篇文章主要介紹了PyTorch平方根報(bào)錯(cuò)的處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python求列表對(duì)應(yīng)元素的乘積和的實(shí)現(xiàn)

    python求列表對(duì)應(yīng)元素的乘積和的實(shí)現(xiàn)

    這篇文章主要介紹了python求列表對(duì)應(yīng)元素的乘積和的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python 簡(jiǎn)單備份文件腳本v1.0的實(shí)例

    python 簡(jiǎn)單備份文件腳本v1.0的實(shí)例

    下面小編就為大家?guī)?lái)一篇python 簡(jiǎn)單備份文件腳本v1.0的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望對(duì)大家有所幫助
    2017-11-11
  • 使用Python腳本自動(dòng)化管理Docker容器的完整指南

    使用Python腳本自動(dòng)化管理Docker容器的完整指南

    在日常開(kāi)發(fā)和運(yùn)維中,我們經(jīng)常需要對(duì) Docker 容器進(jìn)行批量操作,比如啟動(dòng)容器、重置 root 密碼、刪除無(wú)用容器等,手動(dòng)執(zhí)行命令效率低且容易出錯(cuò),所以本文將使用Python腳本自動(dòng)化管理Docker容器,需要的朋友可以參考下
    2026-01-01
  • 詳解Python logging調(diào)用Logger.info方法的處理過(guò)程

    詳解Python logging調(diào)用Logger.info方法的處理過(guò)程

    這篇文章主要介紹了詳解Python logging調(diào)用Logger.info方法的處理過(guò)程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Python2.x和3.x下maketrans與translate函數(shù)使用上的不同

    Python2.x和3.x下maketrans與translate函數(shù)使用上的不同

    這篇文章主要介紹了Python2.x和3.x下maketrans與translate函數(shù)使用上的不同,這兩個(gè)函數(shù)建立映射來(lái)替換內(nèi)容是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-04-04

最新評(píng)論

台南市| 新田县| 广水市| 湾仔区| 义乌市| 沈丘县| 婺源县| 兴宁市| 临颍县| 莲花县| 永泰县| 安泽县| 手游| 澄城县| 高尔夫| 德阳市| 平原县| 浮山县| 景洪市| 江北区| 吴堡县| 威信县| 梅州市| 开鲁县| 镇雄县| 呼玛县| 祁连县| 慈利县| 龙游县| 盐源县| 太湖县| 麻江县| 德清县| 体育| 雷山县| 彩票| 建阳市| 百色市| 额敏县| 成武县| 锦屏县|