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

Python記錄日志的完整指南

 更新時(shí)間:2025年09月05日 09:17:57   作者:detayun  
在Python開發(fā)中,日志記錄是監(jiān)控程序運(yùn)行、排查問題的核心手段,本文基于Python內(nèi)置的logging模塊,結(jié)合最佳實(shí)踐,帶你系統(tǒng)掌握日志記錄的完整方法,需要的朋友可以參考下

一、為什么需要日志記錄?

  • 問題定位:記錄程序運(yùn)行時(shí)狀態(tài),快速定位異常
  • 性能監(jiān)控:跟蹤關(guān)鍵業(yè)務(wù)指標(biāo)(如API請求耗時(shí))
  • 審計(jì)追蹤:記錄用戶操作和系統(tǒng)變更
  • 調(diào)試輔助:比print()更靈活可控的調(diào)試方式

二、基礎(chǔ)使用:5分鐘快速上手

import logging

# 創(chuàng)建基礎(chǔ)配置
logging.basicConfig(
    level=logging.INFO,  # 設(shè)置日志級別
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.StreamHandler(),  # 輸出到控制臺
        logging.FileHandler('app.log')  # 輸出到文件
    ]
)

# 創(chuàng)建記錄器
logger = logging.getLogger('my_app')

# 記錄不同級別的日志
logger.debug('調(diào)試信息')
logger.info('程序正常啟動(dòng)')
logger.warning('磁盤空間不足')
logger.error('數(shù)據(jù)庫連接失敗')
logger.critical('系統(tǒng)崩潰')

三、核心組件深度解析

日志級別(從低到高)

  • DEBUG:詳細(xì)調(diào)試信息
  • INFO:常規(guī)操作記錄
  • WARNING:潛在問題提醒
  • ERROR:運(yùn)行時(shí)錯(cuò)誤
  • CRITICAL:嚴(yán)重錯(cuò)誤導(dǎo)致程序中止

五大核心組件

配置方式對比

配置方式適用場景優(yōu)點(diǎn)
basicConfig()簡單腳本/快速原型一行代碼完成基礎(chǔ)配置
代碼配置中小型項(xiàng)目靈活可控
配置文件大型項(xiàng)目/團(tuán)隊(duì)協(xié)作分離配置與代碼
字典配置動(dòng)態(tài)配置/12因子應(yīng)用兼容環(huán)境變量

四、高級用法與最佳實(shí)踐

1. 日志輪轉(zhuǎn)(避免日志文件過大)

from logging.handlers import RotatingFileHandler

# 每個(gè)文件10MB,保留3個(gè)備份
handler = RotatingFileHandler(
    'app.log', 
    maxBytes=10*1024*1024, 
    backupCount=3
)
logger.addHandler(handler)

2. 異步日志(提升性能)

from logging.handlers import QueueHandler, QueueListener
import queue
import threading

log_queue = queue.Queue(-1)
listener = QueueListener(log_queue, *logger.handlers)
listener.start()

logger.addHandler(QueueHandler(log_queue))

3. 上下文信息記錄(如請求ID)

from logging import LoggerAdapter

class RequestContext:
    def __init__(self, request_id):
        self.request_id = request_id

adapter = LoggerAdapter(logger, {'request_id': 'REQ123'})
adapter.info('處理用戶請求')
# 輸出:[2025-09-04 10:00:00] - my_app - INFO - REQ123 - 處理用戶請求

4. 敏感信息過濾

class SensitiveFilter:
    def filter(self, record):
        msg = record.msg
        # 替換敏感信息(如密碼)
        msg = msg.replace('password=123456', 'password=******')
        record.msg = msg
        return True

logger.addFilter(SensitiveFilter())

五、常見問題解決方案

1. 日志重復(fù)記錄問題

  • 原因:多次調(diào)用getLogger()導(dǎo)致重復(fù)添加Handler
  • 解決:使用__name__作為日志器名稱,確保單例模式

2. 多線程日志安全

  • 問題:多線程下日志順序錯(cuò)亂
  • 解決:使用logging內(nèi)置線程鎖(默認(rèn)已處理),或改用異步日志

3. 日志文件權(quán)限問題

  • 問題:Linux下普通用戶無法寫入日志文件
  • 解決:創(chuàng)建專用日志目錄并設(shè)置權(quán)限
mkdir /var/log/myapp
chmod 775 /var/log/myapp
chown -R appuser:appgroup /var/log/myapp

六、企業(yè)級日志架構(gòu)建議

日志分級策略

  • DEBUG:本地開發(fā)環(huán)境
  • INFO:預(yù)生產(chǎn)環(huán)境
  • WARNING及以上:生產(chǎn)環(huán)境

集中化日志管理

  • 使用ELK(Elasticsearch+Logstash+Kibana)或Sentry
  • 配置日志采集代理(如Filebeat)

日志格式規(guī)范

  • 推薦JSON格式(便于解析)
  • 包含關(guān)鍵字段:時(shí)間戳、日志級別、類名、方法名、消息、線程ID

結(jié)語

掌握Python日志記錄不僅是開發(fā)的基本功,更是構(gòu)建可維護(hù)、可觀測系統(tǒng)的基石。從簡單的print()替換開始,逐步掌握格式化、處理器配置、日志輪轉(zhuǎn)等高級技巧,最終構(gòu)建符合企業(yè)級標(biāo)準(zhǔn)的日志系統(tǒng)。

最佳實(shí)踐建議

  1. 始終使用logging模塊代替print()
  2. 生產(chǎn)環(huán)境至少配置兩個(gè)Handler(控制臺+文件)
  3. 敏感信息必須脫敏處理
  4. 定期審查日志策略(建議每季度)

通過本文的系統(tǒng)講解和代碼示例,相信你已經(jīng)具備設(shè)計(jì)專業(yè)日志系統(tǒng)的能力。立即在項(xiàng)目中實(shí)踐這些技巧,讓你的Python應(yīng)用具備工業(yè)級的可觀測性吧!

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

  • 利用Python實(shí)現(xiàn)劉謙春晚魔術(shù)

    利用Python實(shí)現(xiàn)劉謙春晚魔術(shù)

    劉謙在2024年春晚上的撕牌魔術(shù)的數(shù)學(xué)原理非常簡單,可以用Python完美復(fù)現(xiàn),文中通過代碼示例給大家介紹的非常詳細(xì),感興趣的同學(xué)可以自己動(dòng)手嘗試一下
    2024-02-02
  • Python 命名規(guī)范與最佳實(shí)踐

    Python 命名規(guī)范與最佳實(shí)踐

    本文介紹了Python命名規(guī)范與最佳實(shí)踐,包括變量名、模塊名、類名、函數(shù)名和常量名的命名規(guī)則,強(qiáng)調(diào)了命名的清晰性、一致性、科學(xué)性和避免使用特殊符號,感興趣的朋友一起看看吧
    2025-03-03
  • python3 sqlite3限制條件查詢的操作

    python3 sqlite3限制條件查詢的操作

    這篇文章主要介紹了python3 sqlite3限制條件查詢的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • pytorch torch.gather函數(shù)的使用

    pytorch torch.gather函數(shù)的使用

    torch.gather 是 PyTorch 中用于在指定維度上通過索引從源張量中提取元素的函數(shù),它需要輸入張量、維度索引和索引張量,示例代碼展示了如何使用 torch.gather 從輸入張量中按索引提取元素,返回的結(jié)果張量形狀與索引張量相同
    2024-09-09
  • Python 代碼性能優(yōu)化技巧分享

    Python 代碼性能優(yōu)化技巧分享

    選擇了腳本語言就要忍受其速度,這句話在某種程度上說明了 python 作為腳本的一個(gè)不足之處,那就是執(zhí)行效率和性能不夠理想,特別是在 performance 較差的機(jī)器上,因此有必要進(jìn)行一定的代碼優(yōu)化來提高程序的執(zhí)行效率
    2012-08-08
  • Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()的區(qū)別

    Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()的區(qū)別

    本文主要介紹了OpenCV cv2.imread(),cv2.imshow(),cv2.imwrite()的區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 詳解利用Python scipy.signal.filtfilt() 實(shí)現(xiàn)信號濾波

    詳解利用Python scipy.signal.filtfilt() 實(shí)現(xiàn)信號濾波

    這篇文章主要介紹了詳解利用Python scipy.signal.filtfilt() 實(shí)現(xiàn)信號濾波,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • 解決更改AUTH_USER_MODEL后出現(xiàn)的問題

    解決更改AUTH_USER_MODEL后出現(xiàn)的問題

    這篇文章主要介紹了解決更改AUTH_USER_MODEL后出現(xiàn)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Pyecharts 中Geo函數(shù)常用參數(shù)的用法說明

    Pyecharts 中Geo函數(shù)常用參數(shù)的用法說明

    這篇文章主要介紹了Pyecharts 中Geo函數(shù)常用參數(shù)的用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 最新評論

    高雄县| 邹平县| 南岸区| 苍梧县| 邻水| 襄汾县| 黔西| 四平市| 古浪县| 顺平县| 扶风县| 调兵山市| 策勒县| 顺义区| 甘肃省| 石嘴山市| 淮滨县| 西林县| 青浦区| 靖宇县| 什邡市| 兖州市| 广平县| 勃利县| 米林县| 西吉县| 高邑县| 桂林市| 泸定县| 依安县| 滦南县| 延长县| 新干县| 石楼县| 江都市| 保康县| 边坝县| 华亭县| 临夏县| 广元市| 奉节县|