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

Python最強日志打印庫loguru安裝到高級用法逐步詳解

 更新時間:2026年06月03日 09:06:14   作者:小灰灰搞電子  
對于python開發(fā)者來說,Loguru是一個簡單但功能強大的日志記錄庫,與Python內(nèi)置的logging模塊相比,Loguru提供了更簡潔的API和更多的功能,它使得跟蹤代碼的行為變得輕松而高效,這篇文章主要介紹了Python最強日志打印庫loguru安裝到高級用法的相關(guān)資料,需要的朋友可以參考下

一、Python日志打印庫loguru詳解

loguru是一個簡單、強大且靈活的Python日志庫,旨在替代標準庫logging模塊,提供更簡潔的API和更少的配置負擔。它通過一個全局的logger對象簡化日志記錄過程,支持多種輸出目標、日志旋轉(zhuǎn)、異常捕獲等高級特性。下面我將從安裝到高級用法逐步詳解,幫助您全面掌握loguru。

1、 介紹

loguru庫由Delgan開發(fā),其核心設(shè)計理念是“開箱即用”,減少日志記錄的樣板代碼。相比于Python內(nèi)置的logging模塊,loguru無需復(fù)雜的handler配置,直接提供豐富的功能。主要優(yōu)點包括:

  • 簡潔性:單行代碼即可添加日志處理器。
  • 靈活性:支持自定義格式、過濾器和輸出目標。
  • 易用性:內(nèi)置異常捕獲和上下文管理。
    loguru適用于各種應(yīng)用場景,從小型腳本到大型項目,都能高效處理日志。

2、安裝

安裝loguru非常簡單,使用pip命令即可:

pip install loguru

安裝后,您可以直接在Python腳本中導(dǎo)入并使用它。

3、基本用法

loguru的核心是全局logger對象。導(dǎo)入后,即可直接記錄日志,無需額外配置。默認情況下,日志輸出到標準錯誤流(stderr),并包含時間戳、日志級別和消息。

  • 導(dǎo)入logger

    from loguru import logger
  • 記錄日志
    loguru支持標準日志級別: D E B U G DEBUG DEBUG、 I N F O INFO INFO W A R N I N G WARNING WARNING、 E R R O R ERROR ERROR C R I T I C A L CRITICAL CRITICAL。使用對應(yīng)方法記錄消息:

    logger.debug("這是一條調(diào)試信息")
    logger.info("這是一條普通信息")
    logger.warning("這是一條警告信息")
    logger.error("這是一條錯誤信息")
    logger.critical("這是一條嚴重錯誤信息")

    運行以上代碼,日志會輸出到控制臺,格式類似:[2023-10-05 12:34:56] INFO: 這是一條普通信息

  • 日志級別控制
    默認日志級別為 D E B U G DEBUG DEBUG,但可以通過配置調(diào)整。例如,只記錄 I N F O INFO INFO及以上級別的日志:

    logger.remove()  # 移除默認處理器
    logger.add(sys.stderr, level="INFO")  # 添加新處理器,設(shè)置級別為INFO

    這里,logger.remove()用于清除默認配置,logger.add()添加自定義處理器。

4、配置輸出目標

loguru允許添加多個處理器,將日志輸出到不同目標,如文件、控制臺或網(wǎng)絡(luò)服務(wù)。使用logger.add()方法靈活配置。

  • 輸出到文件
    最簡單的文件日志配置:

    logger.add("app.log")  # 日志輸出到app.log文件

    日志文件會自動創(chuàng)建并追加內(nèi)容。

  • 日志旋轉(zhuǎn)
    loguru內(nèi)置日志旋轉(zhuǎn)功能,防止文件過大。支持按時間或文件大小旋轉(zhuǎn):

    # 按文件大小旋轉(zhuǎn):當文件超過1MB時,創(chuàng)建新文件,最多保留3個備份
    logger.add("app.log", rotation="1 MB", retention=3)
    
    # 按時間旋轉(zhuǎn):每天午夜旋轉(zhuǎn)日志
    logger.add("app.log", rotation="00:00")
    

    參數(shù)rotation指定旋轉(zhuǎn)條件,retention控制備份文件保留數(shù)量。

  • 輸出到控制臺
    默認已輸出到stderr,但可以自定義格式:

    logger.add(sys.stdout, format="{time} | {level} | {message}")

    這里,format參數(shù)定義輸出格式,使用花括號{}引用變量如time(時間)、level(級別)、message(消息)。

5、 日志格式化和過濾器

loguru提供強大的格式化選項,支持自定義消息結(jié)構(gòu)和添加上下文信息。

  • 自定義格式
    使用format參數(shù)定義日志格式。例如,添加進程ID和線程ID:

    logger.add("app.log", format="{time} | {level} | {process} | {thread} | {message}")

    可用變量包括:

    • {time}: 時間戳
    • {level}: 日志級別(如 I N F O INFO INFO
    • {message}: 日志消息
    • {file}: 文件名
    • {line}: 代碼行號
    • {function}: 函數(shù)名
      您還可以使用格式化字符串,例如{time:YYYY-MM-DD HH:mm:ss}指定時間格式。
  • 添加過濾器
    通過filter參數(shù)過濾日志。例如,只記錄來自特定模塊的日志:

    def my_filter(record):
        return "important" in record["message"]  # 只包含消息中帶"important"的日志
    logger.add("app.log", filter=my_filter)

    record是一個字典,包含所有日志信息。

6、 高級特性

loguru支持多種高級功能,提升日志記錄的實用性和可靠性。

  • 異常捕獲
    使用@logger.catch裝飾器自動捕獲函數(shù)內(nèi)的異常,并記錄詳細堆棧信息:

    @logger.catch
    def risky_function():
        return 1 / 0  # 會觸發(fā)異常
    
    risky_function()
    

    當異常發(fā)生時,loguru會記錄錯誤消息和堆棧跟蹤,便于調(diào)試。

  • 上下文變量
    在日志消息中添加額外上下文,使用bind()方法:

    logger.add("app.log", format="{extra[user]} | {message}")
    
    user_logger = logger.bind(user="admin")  # 綁定用戶上下文
    user_logger.info("用戶登錄成功")  # 輸出: admin | 用戶登錄成功
    

    這在多用戶系統(tǒng)中非常有用。

  • 異步日志
    loguru支持異步日志記錄,提高性能:

    logger.add("app.log", enqueue=True)  # 啟用異步隊列
    

    參數(shù)enqueue=True確保日志寫入不阻塞主線程。

  • 自定義處理器
    您可以創(chuàng)建自定義處理器,例如發(fā)送日志到遠程服務(wù):

    def custom_sink(message):
        # 模擬發(fā)送到網(wǎng)絡(luò)
        print(f"發(fā)送日志: {message}")
    
    logger.add(custom_sink)
    

7、代碼示例

下面是一個完整示例,演示loguru的安裝、配置和使用:

from loguru import logger
import sys

# 配置日志:輸出到文件和控制臺,設(shè)置格式和旋轉(zhuǎn)
logger.remove()  # 移除默認處理器
logger.add("app.log", rotation="1 MB", retention=3, format="{time} | {level} | {message}")
logger.add(sys.stdout, format="{time} | {level} | {message}")

# 記錄不同級別日志
logger.info("應(yīng)用程序啟動")
logger.warning("磁盤空間不足")

# 使用異常捕獲
@logger.catch
def divide(a, b):
    return a / b

try:
    divide(10, 0)
except Exception:
    logger.error("發(fā)生除法錯誤")

# 添加上下文
user_logger = logger.bind(user="Alice")
user_logger.info("用戶操作完成")

8、與標準庫logging比較

loguru相比Python內(nèi)置logging模塊有顯著優(yōu)勢:

  • 配置簡化:無需創(chuàng)建handlers、formatters和filters,單行代碼完成配置。
  • API直觀:全局logger對象直接使用,減少學習曲線。
  • 功能豐富:內(nèi)置旋轉(zhuǎn)、異常捕獲等,無需額外擴展。
    但loguru不適用于需要高度自定義日志架構(gòu)的復(fù)雜場景,此時標準庫可能更合適。

9、總結(jié)

loguru是一個高效、易用的Python日志庫,特別適合快速開發(fā)和維護項目。通過本詳解,您應(yīng)已掌握其核心功能:

  • 基本日志記錄和級別控制。
  • 輸出目標配置(文件、控制臺)。
  • 高級特性如日志旋轉(zhuǎn)、異常捕獲和上下文綁定。

二、代碼示例

1、源碼分享

import sys
from loguru import logger
from datetime import datetime
import threading
import time

# -------------------------- 1. 自定義日志格式(復(fù)雜格式) --------------------------
# 格式說明:時間 | 進程ID | 線程名 | 日志級別 | 模塊名 | 函數(shù)名 | 日志內(nèi)容
LOG_FORMAT = (
    "<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
    "<blue>{process.id}</blue> | "
    "<magenta>{thread.name}</magenta> | "
    "<level>{level: <8}</level> | "
    "<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - "
    "<level>{message}</level>"
)

# -------------------------- 2. 配置多文件日志輸出(分級別/分場景) --------------------------
# 清空默認控制臺輸出(按需保留)
logger.remove()

# 2.1 控制臺輸出:彩色日志,只輸出 INFO 及以上級別
logger.add(
    sink=sys.stdout,
    format=LOG_FORMAT,
    level="INFO",
    enqueue=True,  # 異步輸出,提升性能
    colorize=True  # 彩色日志
)

# 2.2 錯誤日志單獨文件:只保存 ERROR/CRITICAL 級別,自動壓縮
logger.add(
    sink="logs/error_{time:YYYY-MM-DD}.log",  # 按天分割文件
    format=LOG_FORMAT,
    level="ERROR",
    encoding="utf-8",
    rotation="00:00",  # 每天凌晨分割新文件
    retention="30 days",  # 保留30天日志
    compression="zip",  # 舊日志自動壓縮為zip
    enqueue=True,
    backtrace=True,  # 完整異常堆棧
    diagnose=True  # 開發(fā)環(huán)境開啟變量診斷,生產(chǎn)環(huán)境建議關(guān)閉
)

# 2.3 全量日志文件:保存所有級別日志,文件大小超過100MB自動分割
logger.add(
    sink="logs/all_{time:YYYY-MM-DD}.log",
    format=LOG_FORMAT,
    level="DEBUG",
    encoding="utf-8",
    rotation="100 MB",  # 按文件大小分割
    retention="15 days",
    enqueue=True
)


# -------------------------- 3. 自定義日志過濾(精準過濾日志) --------------------------
def filter_debug_only(record):
    """僅保留DEBUG級別日志"""
    return record["level"].name == "DEBUG"


# 單獨保存DEBUG級別日志
logger.add(
    sink="logs/debug.log",
    format=LOG_FORMAT,
    filter=filter_debug_only,
    encoding="utf-8",
    enqueue=True
)

# -------------------------- 4. 上下文綁定(統(tǒng)一添加日志字段) --------------------------
# 全局綁定公共字段:請求ID、用戶ID
logger = logger.bind(request_id="REQ_123456", user_id="UID_789")


# -------------------------- 5. 高級功能:異常捕獲、結(jié)構(gòu)化日志、多線程測試 --------------------------
def demo_business_logic(num: int):
    """模擬業(yè)務(wù)邏輯"""
    try:
        # 分級日志打印
        logger.debug(f"開始執(zhí)行業(yè)務(wù)邏輯,參數(shù): {num}")
        logger.info(f"業(yè)務(wù)邏輯執(zhí)行中,當前時間: {datetime.now()}")

        if num < 0:
            # 手動拋出異常,測試異常日志
            raise ValueError("數(shù)字不能為負數(shù)!")

        # 結(jié)構(gòu)化日志(JSON格式,方便日志平臺解析)
        logger.bind(biz_type="order").info("訂單創(chuàng)建成功", extra={"order_id": "ORDER_001", "amount": 99.9})

        logger.success("業(yè)務(wù)邏輯執(zhí)行完成?")
    except Exception as e:
        # 自動捕獲完整異常堆棧
        logger.exception("業(yè)務(wù)邏輯執(zhí)行失敗:")


def multi_thread_test():
    """多線程日志測試"""
    threads = []
    for i in range(3):
        t = threading.Thread(target=demo_business_logic, args=(i,), name=f"Thread-{i}")
        threads.append(t)
        t.start()

    # 測試異常線程
    error_thread = threading.Thread(target=demo_business_logic, args=(-1,), name="Thread-Error")
    error_thread.start()

    for t in threads:
        t.join()
    error_thread.join()


# -------------------------- 6. 日志級別動態(tài)修改 --------------------------
def change_log_level(new_level: str):
    """動態(tài)修改日志級別"""
    logger.remove()
    # 重新添加處理器,修改level參數(shù)
    logger.add(sys.stdout, format=LOG_FORMAT, level=new_level, colorize=True)
    logger.add("logs/error.log", format=LOG_FORMAT, level="ERROR", encoding="utf-8")
    logger.info(f"日志級別已修改為: {new_level}")


# -------------------------- 主程序入口 --------------------------
if __name__ == "__main__":
    # 自動創(chuàng)建logs文件夾(loguru會自動創(chuàng)建)
    logger.info("=== Loguru 高級示例啟動 ===")

    # 執(zhí)行業(yè)務(wù)邏輯
    demo_business_logic(10)

    # 執(zhí)行多線程測試
    logger.info("=== 開始多線程日志測試 ===")
    multi_thread_test()

    # 動態(tài)修改日志級別為WARNING(僅輸出警告及以上)
    logger.info("=== 動態(tài)修改日志級別為 WARNING ===")
    change_log_level("WARNING")

    # 測試級別修改效果
    logger.debug("這條DEBUG日志不會輸出")
    logger.warning("這條WARNING日志會輸出")

    logger.critical("=== 程序運行結(jié)束,關(guān)鍵日志已全部保存 ===")

三、運行結(jié)果

C:\Users\徐鵬\Desktop\55\.venv\Scripts\python.exe C:\Users\徐鵬\Desktop\55\main.py 
2026-04-02 09:02:25.883 | 25844 | MainThread | INFO     | __main__:<module>:128 - === Loguru 高級示例啟動 ===
2026-04-02 09:02:25.884 | 25844 | MainThread | INFO     | __main__:demo_business_logic:83 - 業(yè)務(wù)邏輯執(zhí)行中,當前時間: 2026-04-02 09:02:25.884706
2026-04-02 09:02:25.884 | 25844 | MainThread | INFO     | __main__:demo_business_logic:90 - 訂單創(chuàng)建成功
2026-04-02 09:02:25.884 | 25844 | MainThread | SUCCESS  | __main__:demo_business_logic:92 - 業(yè)務(wù)邏輯執(zhí)行完成?
2026-04-02 09:02:25.884 | 25844 | MainThread | INFO     | __main__:<module>:134 - === 開始多線程日志測試 ===
2026-04-02 09:02:25.885 | 25844 | Thread-0 | INFO     | __main__:demo_business_logic:83 - 業(yè)務(wù)邏輯執(zhí)行中,當前時間: 2026-04-02 09:02:25.885793
2026-04-02 09:02:25.885 | 25844 | Thread-1 | INFO     | __main__:demo_business_logic:83 - 業(yè)務(wù)邏輯執(zhí)行中,當前時間: 2026-04-02 09:02:25.885793
2026-04-02 09:02:25.885 | 25844 | Thread-0 | INFO     | __main__:demo_business_logic:90 - 訂單創(chuàng)建成功
2026-04-02 09:02:25.886 | 25844 | Thread-1 | INFO     | __main__:demo_business_logic:90 - 訂單創(chuàng)建成功
2026-04-02 09:02:25.886 | 25844 | Thread-2 | INFO     | __main__:demo_business_logic:83 - 業(yè)務(wù)邏輯執(zhí)行中,當前時間: 2026-04-02 09:02:25.886883
2026-04-02 09:02:25.886 | 25844 | Thread-Error | INFO     | __main__:demo_business_logic:83 - 業(yè)務(wù)邏輯執(zhí)行中,當前時間: 2026-04-02 09:02:25.886883
2026-04-02 09:02:25.886 | 25844 | Thread-0 | SUCCESS  | __main__:demo_business_logic:92 - 業(yè)務(wù)邏輯執(zhí)行完成?
2026-04-02 09:02:25.886 | 25844 | Thread-1 | SUCCESS  | __main__:demo_business_logic:92 - 業(yè)務(wù)邏輯執(zhí)行完成?
2026-04-02 09:02:25.887 | 25844 | Thread-2 | INFO     | __main__:demo_business_logic:90 - 訂單創(chuàng)建成功
2026-04-02 09:02:25.887 | 25844 | Thread-2 | SUCCESS  | __main__:demo_business_logic:92 - 業(yè)務(wù)邏輯執(zhí)行完成?
2026-04-02 09:02:25.887 | 25844 | Thread-Error | ERROR    | __main__:demo_business_logic:95 - 業(yè)務(wù)邏輯執(zhí)行失?。?
Traceback (most recent call last):

  File "E:\Python\pyhon3.8.2\lib\threading.py", line 890, in _bootstrap
    self._bootstrap_inner()
    │    └ <function Thread._bootstrap_inner at 0x00000291EC49F040>
    └ <Thread(Thread-Error, started 21588)>

  File "E:\Python\pyhon3.8.2\lib\threading.py", line 932, in _bootstrap_inner
    self.run()
    │    └ <function Thread.run at 0x00000291EC49CD30>
    └ <Thread(Thread-Error, started 21588)>

  File "E:\Python\pyhon3.8.2\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
    │    │        │    │        │    └ {}
    │    │        │    │        └ <Thread(Thread-Error, started 21588)>
    │    │        │    └ (-1,)
    │    │        └ <Thread(Thread-Error, started 21588)>
    │    └ <function demo_business_logic at 0x00000291EE35ADC0>
    └ <Thread(Thread-Error, started 21588)>

> File "C:\Users\徐鵬\Desktop\55\main.py", line 87, in demo_business_logic
    raise ValueError("數(shù)字不能為負數(shù)!")

ValueError: 數(shù)字不能為負數(shù)!
2026-04-02 09:02:25.899 | 25844 | MainThread | INFO     | __main__:<module>:138 - === 動態(tài)修改日志級別為 WARNING ===
2026-04-02 09:02:25.902 | 25844 | MainThread | WARNING  | __main__:<module>:143 - 這條WARNING日志會輸出
2026-04-02 09:02:25.902 | 25844 | MainThread | CRITICAL | __main__:<module>:145 - === 程序運行結(jié)束,關(guān)鍵日志已全部保存 ===

進程已結(jié)束,退出代碼為 0

總結(jié)

到此這篇關(guān)于Python最強日志打印庫loguru安裝到高級用法逐步詳解的文章就介紹到這了,更多相關(guān)Python日志打印庫loguru內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python3利用Socket實現(xiàn)通信的方法示例

    python3利用Socket實現(xiàn)通信的方法示例

    這篇文章主要介紹了python3利用Socket實現(xiàn)通信的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • 對于Python的Django框架部署的一些建議

    對于Python的Django框架部署的一些建議

    這篇文章主要介紹了對于Python的Django框架部署的一些建議,包括項目文件的布局等,需要的朋友可以參考下
    2015-04-04
  • python實現(xiàn)代理服務(wù)功能實例

    python實現(xiàn)代理服務(wù)功能實例

    本文分析了代理服務(wù)的原理,并使用PYTHON實現(xiàn)了一個簡單的代理服務(wù)功能供大家參考使用
    2013-11-11
  • python處理json文件的四個常用函數(shù)

    python處理json文件的四個常用函數(shù)

    這篇文章主要介紹了python處理json文件的四個常用函數(shù),主要包括json.load()和json.dump()及json.loads()還有json.dumps(),需要的朋友可以參考一下
    2022-07-07
  • python安裝pywin32clipboard的操作方法

    python安裝pywin32clipboard的操作方法

    今天小編就為大家分享一篇python安裝pywin32clipboard的操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python?Opencv實現(xiàn)圖片切割處理

    Python?Opencv實現(xiàn)圖片切割處理

    這篇文章主要為大家詳細介紹了Python?Opencv實現(xiàn)圖片切割處理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Django 實現(xiàn)購物車功能的示例代碼

    Django 實現(xiàn)購物車功能的示例代碼

    這篇文章主要介紹了Django 實現(xiàn)購物車功能的示例代碼,實現(xiàn)了刪除產(chǎn)品和顯示購物車的一系列購物車的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • Python深度學習之使用Albumentations對圖像做增強

    Python深度學習之使用Albumentations對圖像做增強

    諸如RandomCrop和CenterCrop之類的某些增強功能可能會變換圖像,使其不包含所有原始邊界框. 本示例說明如何使用名為RandomSizedBBoxSafeCrop的變換來裁剪圖像的一部分,但保留原始圖像的所有邊界框,需要的朋友可以參考下
    2021-05-05
  • python生成日歷實例解析

    python生成日歷實例解析

    這篇文章主要介紹了python生成日歷的方法,實用了python自帶的 calendar模塊加以實現(xiàn),需要的朋友可以參考下
    2014-08-08
  • 面向新手解析python Beautiful Soup基本用法

    面向新手解析python Beautiful Soup基本用法

    這篇文章主要介紹了面向新手解析python Beautiful Soup基本用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07

最新評論

固安县| 湘西| 龙游县| 嘉善县| 枣庄市| 新巴尔虎右旗| 上高县| 周宁县| 耿马| 蒲城县| 张家口市| 石棉县| 沙雅县| 阳泉市| 文登市| 柘荣县| 鲜城| 辽阳市| 托克托县| 开化县| 施甸县| 海丰县| 郸城县| 哈巴河县| 漯河市| 沅江市| 迁安市| 革吉县| 桓台县| 清水河县| 布尔津县| 香港| 英吉沙县| 蒙山县| 青海省| 临潭县| 大方县| 无极县| 泰州市| 福泉市| 疏勒县|