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

Python Logging庫完全指南

 更新時間:2026年02月24日 10:14:49   作者:UrbanJazzerati  
本文主要介紹了Python Logging庫完全指南,包括為什么使用Logging、快速開始、核心配置、進階技巧和實用場景示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、為什么要使用Logging?

很多初學(xué)者喜歡用print()調(diào)試,但在實際項目中會遇到問題:

  • 項目跑起來后,不能隨意中斷程序查看輸出
  • 需要區(qū)分不同重要程度的信息(錯誤、警告、普通信息)
  • 需要將日志保存到文件方便后續(xù)分析
  • 在生產(chǎn)環(huán)境中,需要動態(tài)調(diào)整日志詳細程度

這就是Logging庫存在的意義!

二、快速開始:5分鐘上手

基礎(chǔ)示例

import logging

# 最簡單的使用方式
logging.basicConfig(level=logging.WARN)  # 設(shè)置日志級別

logging.debug('這是一條debug信息')      # 不會顯示(默認級別更高)
logging.info('這是一條info信息')        # 不會顯示
logging.warning('這是一條warning信息')  # 會顯示√
logging.error('這是一條error信息')      # 會顯示√
logging.critical('這是一條critical信息')# 會顯示√

理解日志級別(從低到高)

  1. DEBUG - 調(diào)試細節(jié),開發(fā)時使用
  2. INFO - 普通信息,確認事情按預(yù)期運行
  3. WARNING - 警告,發(fā)生了意外但不影響運行
  4. ERROR - 錯誤,部分功能受影響
  5. CRITICAL - 嚴重錯誤,程序可能崩潰

重要規(guī)則: 只會顯示設(shè)置級別及以上的日志!

三、核心配置:讓日志更實用

1. 配置日志格式和輸出

# 詳細配置示例
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
    filename='app.log',  # 輸出到文件
    filemode='a',         # 追加模式
    encoding='utf-8'     # 指定UTF-8編碼,解決中文亂碼問題
)


# 使用
logging.info("程序啟動")
logging.warning("磁盤空間不足90%")
logging.error("數(shù)據(jù)庫連接失敗")

2. 常用格式化字段

%(name)s          Logger的名字
%(levelname)s     日志級別
%(message)s       日志內(nèi)容
%(asctime)s       時間,可指定格式
%(filename)s      文件名
%(funcName)s      函數(shù)名
%(lineno)d        行號

四、進階技巧:模塊化使用

在實際項目中,我們通常不直接使用logging模塊,而是創(chuàng)建自己的Logger:

1. 創(chuàng)建模塊專用的Logger

# 在每個模塊中這樣做
import logging


# 創(chuàng)建logger實例,通常以模塊名命名
logger = logging.getLogger(__name__)  # 這是最佳實踐!


def process_data(data):
    logger.debug(f"開始處理數(shù)據(jù),長度: {len(data)}")
    try:
        # 你的業(yè)務(wù)邏輯
        result = data * 2
        logger.info(f"數(shù)據(jù)處理成功,結(jié)果: {result}")
        return result
    except Exception as e:
        logger.error(f"數(shù)據(jù)處理失敗: {str(e)}", exc_info=True)
        return None

2. 項目級別的配置

# config_logging.py - 日志配置文件
import logging
import logging.handlers
import os


def setup_logging():
    """配置項目日志系統(tǒng)"""
    
    # 創(chuàng)建formatter(定義日志格式)
    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    )
    
    # 創(chuàng)建logger
    logger = logging.getLogger()  # 根logger
    logger.setLevel(logging.DEBUG)  # 設(shè)置最低級別
    
    # 控制臺處理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)  # 控制臺只顯示INFO及以上
    console_handler.setFormatter(formatter)
    
    # 文件處理器
    file_handler = logging.FileHandler('app.log')
    file_handler.setLevel(logging.DEBUG)  # 文件記錄所有DEBUG及以上
    file_handler.setFormatter(formatter)
    
    # 按時間切分的文件處理器(推薦生產(chǎn)環(huán)境使用)
    time_handler = logging.handlers.TimedRotatingFileHandler(
        'app.log',
        when='midnight',  # 每天午夜切分
        interval=1,
        backupCount=7     # 保留7天
    )
    time_handler.setFormatter(formatter)
    
    # 添加處理器
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)
    # logger.addHandler(time_handler)  # 使用這個替換上面的file_handler

五、實用場景示例

場景1:Web應(yīng)用日志

import logging
from logging.handlers import RotatingFileHandler


# 創(chuàng)建logger
logger = logging.getLogger('webapp')
logger.setLevel(logging.INFO)


# 按大小滾動日志文件(最大10MB,保留5個備份)
handler = RotatingFileHandler(
    'webapp.log',
    maxBytes=10*1024*1024,  # 10MB
    backupCount=5
)


formatter = logging.Formatter(
    '%(asctime)s - %(clientip)s - %(user)s - %(message)s'
)
handler.setFormatter(formatter)
logger.addHandler(handler)


# 使用(假設(shè)在請求處理中)
def handle_request(request, user):
    # 添加額外信息
    extra = {'clientip': request.client_ip, 'user': user}
    logger.info('用戶登錄成功', extra=extra)

場景2:不同級別日志分開存儲

import logging


# 配置不同的處理器
logger = logging.getLogger('myapp')


# 錯誤日志單獨保存
error_handler = logging.FileHandler('errors.log')
error_handler.setLevel(logging.ERROR)


# 所有日志保存
all_handler = logging.FileHandler('all.log')
all_handler.setLevel(logging.DEBUG)


# 設(shè)置格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
error_handler.setFormatter(formatter)
all_handler.setFormatter(formatter)


logger.addHandler(error_handler)
logger.addHandler(all_handler)

六、最佳實踐和小貼士

?應(yīng)該這樣做:

  1. 盡早配置日志:在程序入口處配置,不要多處配置

  2. 使用getLogger(__name__) :自動獲取模塊名作為logger名

  3. 合理使用級別

    • DEBUG:調(diào)試信息
    • INFO:關(guān)鍵流程節(jié)點
    • WARNING:可預(yù)料的問題
    • ERROR:需要關(guān)注的錯誤
  4. 包含上下文信息:logger.error(f"用戶{user_id}操作失敗")

避免這樣做:

  1. 不要在所有地方都用根logger
  2. 不要在日志中記錄敏感信息(密碼、密鑰)
  3. 不要過度記錄,避免日志過大

總結(jié)

Logging庫看似復(fù)雜,但核心只有幾個概念:

  1. Logger - 記錄器(誰在記錄)
  2. Handler - 處理器(記錄到哪里)
  3. Formatter - 格式化器(怎么記錄)
  4. Level - 級別(記錄什么)

到此這篇關(guān)于Python Logging庫完全指南的文章就介紹到這了,更多相關(guān)Python Logging庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Python實現(xiàn)模擬三體運動的示例代碼

    基于Python實現(xiàn)模擬三體運動的示例代碼

    此前所做的一切三體和太陽系的動畫,都是基于牛頓力學(xué)的,而且直接對微分進行差分化,從而精度非常感人,用不了幾年就得撞一起去。所以本文來用Python重新模擬一下三體運動,感興趣的可以了解一下
    2023-03-03
  • python使用scapy模塊實現(xiàn)ping掃描的過程詳解

    python使用scapy模塊實現(xiàn)ping掃描的過程詳解

    這篇文章主要介紹了python使用scapy模塊實現(xiàn)ping掃描的過程詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 淺談Python響應(yīng)式類庫RxPy

    淺談Python響應(yīng)式類庫RxPy

    RxPy是非常流行的響應(yīng)式框架Reactive X的Python版本,其實這些版本都是一樣的,只不過是各個語言的實現(xiàn)不同而已。因此,如果學(xué)會了其中一種,那么使用其他的響應(yīng)式版本也是輕而易舉的
    2021-06-06
  • python使用tornado實現(xiàn)登錄和登出

    python使用tornado實現(xiàn)登錄和登出

    這篇文章主要為大家詳細介紹了python使用tornado實現(xiàn)登錄和登出,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python字典循環(huán)添加一鍵多值的用法實例

    Python字典循環(huán)添加一鍵多值的用法實例

    今天小編就為大家分享一篇Python字典循環(huán)添加一鍵多值的用法實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python中五種不同解析庫的應(yīng)用與提取速度對比

    Python中五種不同解析庫的應(yīng)用與提取速度對比

    這篇文章主要為大家詳細介紹了Python中五種不同解析庫的應(yīng)用與提取速度對比,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-05-05
  • 使用Python實現(xiàn)為PDF文檔設(shè)置和移除密碼

    使用Python實現(xiàn)為PDF文檔設(shè)置和移除密碼

    在數(shù)字化時代,文檔的安全性變得越來越重要,特別是對于包含敏感信息的PDF文件,所以本文主要來和大家介紹一下如何使用Python實現(xiàn)為PDF文檔設(shè)置和移除密碼,需要的可以參考下
    2024-03-03
  • Python如何使用bokeh包和geojson數(shù)據(jù)繪制地圖

    Python如何使用bokeh包和geojson數(shù)據(jù)繪制地圖

    這篇文章主要介紹了Python如何使用bokeh包和geojson數(shù)據(jù)繪制地圖,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Python 寫小游戲吃金幣+打乒乓+滑雪(附源碼)

    Python 寫小游戲吃金幣+打乒乓+滑雪(附源碼)

    這篇文章主要給大家分享的是利用Python 寫小游戲吃金幣、打乒乓、滑雪并附上源碼,具有一的知識性參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • python re正則匹配網(wǎng)頁中圖片url地址的方法

    python re正則匹配網(wǎng)頁中圖片url地址的方法

    今天小編就為大家分享一篇python re正則匹配網(wǎng)頁中圖片url地址的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12

最新評論

津南区| 郧西县| 德州市| 礼泉县| 宁都县| 迁安市| 津南区| 高雄县| 六安市| 嘉荫县| 平谷区| 漾濞| 六枝特区| 勐海县| 稻城县| 莱芜市| 台南县| 中宁县| 南涧| 台东县| 疏附县| 承德市| 西丰县| 阳曲县| 砚山县| 汉寿县| 南皮县| 陕西省| 永胜县| 宜黄县| 浦东新区| 大名县| 南江县| 扬中市| 安塞县| 盈江县| 三门峡市| 南京市| 蕉岭县| 曲松县| 揭东县|