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

Python使用colorlog庫(kù)為日志添加色彩編碼

 更新時(shí)間:2025年12月08日 09:23:27   作者:諸神緘默不語(yǔ)  
在日常開(kāi)發(fā)和調(diào)試中,日志是我們最親密的伙伴,但是,面對(duì)密密麻麻的黑白日志文本,快速定位錯(cuò)誤、警告或關(guān)鍵信息往往如同大海撈針,這時(shí)候,colorlog 庫(kù)就能大顯身手了!本文給大家介紹了Python如何使用colorlog庫(kù)為日志添加色彩編碼,需要的朋友可以參考下

還在看單調(diào)的黑白日志嗎?給日志加點(diǎn)顏色,讓調(diào)試變得更高效!

前言:為什么需要彩色日志?

在日常開(kāi)發(fā)和調(diào)試中,日志是我們最親密的伙伴。但是,面對(duì)密密麻麻的黑白日志文本,快速定位錯(cuò)誤、警告或關(guān)鍵信息往往如同大海撈針。這時(shí)候,colorlog 庫(kù)就能大顯身手了!它能為不同級(jí)別的日志信息添加不同的顏色,讓日志輸出一目了然,大大提升調(diào)試效率。

使用 colorlog 為日志添加色彩編碼,能讓不同嚴(yán)重級(jí)別的信息一目了然,從而提升調(diào)試體驗(yàn)。

什么是 colorlog?

colorlog 是一個(gè) Python 日志格式化工具,它擴(kuò)展了 Python 標(biāo)準(zhǔn)庫(kù)中的 logging 模塊,專門用于在終端輸出帶顏色的日志 。通過(guò)為不同日志級(jí)別配置不同顏色,我們可以快速區(qū)分 DEBUG、INFO、WARNING、ERROR 等級(jí)別的信息。

安裝 colorlog

安裝 colorlog 非常簡(jiǎn)單,只需使用 pip:

pip install colorlog

基礎(chǔ)用法:快速上手

讓我們先來(lái)看一個(gè)簡(jiǎn)單的例子,了解 colorlog 的基本使用方法:

import colorlog
import logging

# 創(chuàng)建 logger 實(shí)例
logger = colorlog.getLogger('example')

# 創(chuàng)建 StreamHandler
handler = colorlog.StreamHandler()

# 設(shè)置格式化器
handler.setFormatter(colorlog.ColoredFormatter(
    '%(log_color)s%(levelname)s:%(name)s:%(message)s'
))

# 添加 handler 到 logger
logger.addHandler(handler)

# 設(shè)置日志級(jí)別
logger.setLevel(logging.DEBUG)

# 測(cè)試不同級(jí)別的日志輸出
logger.debug("這是一條 DEBUG 級(jí)別的日志")
logger.info("這是一條 INFO 級(jí)別的日志")
logger.warning("這是一條 WARNING 級(jí)別的日志")
logger.error("這是一條 ERROR 級(jí)別的日志")
logger.critical("這是一條 CRITICAL 級(jí)別的日志")

運(yùn)行上面的代碼,你將在終端中看到不同顏色的日志輸出,默認(rèn)情況下:

  • DEBUG:青色
  • INFO:綠色
  • WARNING:黃色
  • ERROR:紅色
  • CRITICAL:紅色背景白色文字

核心組件詳解

ColoredFormatter 類

ColoredFormatter 是 colorlog 的核心類,它繼承自 Python 標(biāo)準(zhǔn)的 logging.Formatter,專門用于生成帶顏色的日志輸出 。

主要參數(shù)說(shuō)明:

  • format:用于輸出日志的格式化字符串(必需)
  • datefmt:可選的日期格式,傳遞給基類
  • reset:默認(rèn)為 True,表示在消息輸出結(jié)束時(shí)添加顏色重置代碼
  • log_colors:日志級(jí)別到顏色名稱的映射
  • secondary_log_colors:定義在格式化字符串中可用的其他顏色
  • style:在 Python 3.2 以上版本可用

顏色配置詳解

colorlog 支持豐富的顏色配置選項(xiàng):

基本顏色名稱: black, red, green, yellow, blue, purple, cyan, white

顏色前綴:

  • fg_{color}:設(shè)置前景色(文字顏色)
  • bg_{color}:設(shè)置背景色 
  • bold、bold_{color}:設(shè)置粗體/亮色

特殊代碼:

  • reset:清除所有格式(包括前景色和背景色)

高級(jí)配置技巧

1. 自定義日志顏色

你可以完全自定義每個(gè)日志級(jí)別的顏色:

from colorlog import ColoredFormatter

formatter = ColoredFormatter(
    "%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s",
    datefmt=None,
    reset=True,
    log_colors={
        'DEBUG': 'cyan',
        'INFO': 'green',
        'WARNING': 'yellow',
        'ERROR': 'red',
        'CRITICAL': 'red,bg_white',
    },
    secondary_log_colors={},
    style='%'
)

handler = logging.StreamHandler()
handler.setFormatter(formatter)

logger = logging.getLogger('custom_example')
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

2. 使用輔助顏色

secondary_log_colors 允許你為同一日志消息的不同部分設(shè)置不同的顏色規(guī)則:

formatter = ColoredFormatter(
    "%(log_color)s%(levelname)-8s%(reset)s %(message_log_color)s%(message)s",
    secondary_log_colors={
        'message': {
            'ERROR': 'red',
            'CRITICAL': 'red'
        }
    }
)

這個(gè)配置會(huì)讓 ERROR 和 CRITICAL 級(jí)別的日志消息本身顯示為紅色,而其他級(jí)別的消息保持默認(rèn)顏色 。

3. 使用字典配置

對(duì)于大型項(xiàng)目,推薦使用 dictConfig 進(jìn)行配置:

import logging.config

logging.config.dictConfig({
    'formatters': {
        'colored': {
            '()': 'colorlog.ColoredFormatter',
            'format': "%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s"
        }
    },
    'handlers': {
        'stream': {
            'class': 'logging.StreamHandler',
            'formatter': 'colored',
        },
    },
    'root': {
        'handlers': ['stream'],
        'level': 'DEBUG',
    }
})

logger = logging.getLogger('dict_config_example')

4. 配置文件方式

你也可以使用 .ini 格式的配置文件:

[loggers]
keys=root

[logger_root]
handlers=stream
level=DEBUG

[formatters]
keys=color

[formatter_color]
class=colorlog.ColoredFormatter
format=%(log_color)s%(levelname)s:%(name)s:%(message)s
datefmt=%H:%M:%S

[handlers]
keys=stream

[handler_stream]
class=StreamHandler
formatter=color
args=()

然后在代碼中加載配置:

import logging
import logging.config

logging.config.fileConfig('logging_config.ini')
logger = logging.getLogger('config_file_example')

實(shí)際應(yīng)用示例

在 FastAPI 項(xiàng)目中使用 colorlog

讓我們看看如何在 FastAPI 項(xiàng)目中使用 colorlog 來(lái)美化日志輸出:

import colorlog
import logging
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

# 配置日志
handler = colorlog.StreamHandler()
formatter = colorlog.ColoredFormatter(
    "%(log_color)s%(asctime)s - %(levelname)-8s%(reset)s %(blue)s%(name)-15s %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S",
    log_colors={
        'DEBUG': 'cyan',
        'INFO': 'bold_green',
        'WARNING': 'bold_yellow',
        'ERROR': 'bold_red',
        'CRITICAL': 'bold_red,bg_white',
    }
)
handler.setFormatter(formatter)

# 為 FastAPI 相關(guān)日志器配置 colorlog
uvicorn_logger = logging.getLogger("uvicorn")
uvicorn_logger.handlers = []
uvicorn_logger.addHandler(handler)
uvicorn_logger.setLevel(logging.DEBUG)

uvicorn_access = logging.getLogger("uvicorn.access")
uvicorn_access.handlers = []
uvicorn_access.addHandler(handler)

app = FastAPI(title="Colorful API", version="1.0.0")
logger = colorlog.getLogger("api")
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

class Item(BaseModel):
    name: str
    description: str = None
    price: float

@app.get("/")
async def read_root():
    logger.info("訪問(wèn)根路徑")
    return {"message": "歡迎使用彩色日志 API!"}

@app.post("/items/")
async def create_item(item: Item):
    logger.debug(f"創(chuàng)建商品: {item.name}, 價(jià)格: {item.price}")
    
    if item.price <= 0:
        logger.warning(f"商品價(jià)格無(wú)效: {item.price}")
        raise HTTPException(status_code=400, detail="價(jià)格必須大于0")
    
    logger.info(f"成功創(chuàng)建商品: {item.name}")
    return {"status": "success", "item": item}

@app.get("/error-test")
async def error_test():
    try:
        # 模擬一個(gè)錯(cuò)誤
        result = 1 / 0
    except Exception as e:
        logger.error(f"發(fā)生錯(cuò)誤: {str(e)}", exc_info=True)
        raise HTTPException(status_code=500, detail="內(nèi)部服務(wù)器錯(cuò)誤")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000, log_config=None)

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

有時(shí)候,我們既想要在控制臺(tái)看到彩色日志,又希望將日志保存到文件中(不包含顏色代碼):

import colorlog
import logging

# 創(chuàng)建 logger
logger = colorlog.getLogger('multi_handler')

# 控制臺(tái) Handler(帶顏色)
console_handler = colorlog.StreamHandler()
console_formatter = colorlog.ColoredFormatter(
    "%(log_color)s%(asctime)s %(levelname)-8s%(reset)s %(blue)s%(message)s",
    datefmt="%H:%M:%S"
)
console_handler.setFormatter(console_formatter)

# 文件 Handler(無(wú)顏色)
file_handler = logging.FileHandler('app.log')
file_formatter = logging.Formatter(
    "%(asctime)s %(levelname)-8s %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S"
)
file_handler.setFormatter(file_formatter)

# 添加兩個(gè) handler
logger.addHandler(console_handler)
logger.addHandler(file_handler)
logger.setLevel(logging.DEBUG)

# 測(cè)試日志
logger.info("這條消息會(huì)同時(shí)顯示在控制臺(tái)(帶顏色)和文件(無(wú)顏色)中")

自定義日志級(jí)別

你甚至可以創(chuàng)建自定義的日志級(jí)別并為其指定顏色:

import logging
import colorlog

# 創(chuàng)建自定義日志級(jí)別
TRACE = 5
logging.addLevelName(TRACE, 'TRACE')

# 添加 trace 方法到 logger
def trace(self, message, *args, **kws):
    if self.isEnabledFor(TRACE):
        self._log(TRACE, message, args, **kws)

logging.Logger.trace = trace

# 配置 colorlog 包含自定義級(jí)別
formatter = colorlog.ColoredFormatter(
    log_colors={
        'TRACE': 'yellow',
        'DEBUG': 'cyan',
        'INFO': 'green',
        'WARNING': 'yellow',
        'ERROR': 'red',
        'CRITICAL': 'red,bg_white',
    },
    format='%(log_color)s%(levelname)-8s%(reset)s %(message)s'
)

handler = logging.StreamHandler()
handler.setFormatter(formatter)

logger = colorlog.getLogger('custom_level')
logger.addHandler(handler)
logger.setLevel(TRACE)

# 使用自定義級(jí)別
logger.trace("這是一條 TRACE 級(jí)別的日志")

注意事項(xiàng)和最佳實(shí)踐

  1. 兼容性:colorlog 主要適用于終端輸出,在文件日志中顏色代碼可能會(huì)顯示為亂碼。
  2. 性能:在生產(chǎn)環(huán)境中,可以考慮根據(jù)環(huán)境變量決定是否啟用彩色日志,以減少不必要的性能開(kāi)銷。
  3. 一致性:在團(tuán)隊(duì)項(xiàng)目中,建議統(tǒng)一顏色配置,確保所有成員對(duì)顏色含義有相同的理解。
  4. 可訪問(wèn)性:考慮到色盲或色弱用戶,不要完全依賴顏色來(lái)區(qū)分日志級(jí)別,還應(yīng)該保留文字級(jí)別的信息。

以上就是Python使用colorlog庫(kù)為日志添加色彩編碼的詳細(xì)內(nèi)容,更多關(guān)于Python colorlog日志顏色的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python類如何定義私有變量

    Python類如何定義私有變量

    這篇文章主要介紹了Python類如何定義私有變量,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python流程控制之for循環(huán)與range函數(shù)的搭配使用教學(xué)

    Python流程控制之for循環(huán)與range函數(shù)的搭配使用教學(xué)

    本文介紹了for循環(huán)與range函數(shù)的搭配使用在Python編程中的重要性,包括核心概念、應(yīng)用場(chǎng)景、技術(shù)原理、實(shí)踐應(yīng)用、常見(jiàn)問(wèn)題與解決方案、最佳實(shí)踐等內(nèi)容,希望對(duì)大家有所幫助
    2026-05-05
  • cmd輸入python命令無(wú)反應(yīng)的解決方案

    cmd輸入python命令無(wú)反應(yīng)的解決方案

    這篇文章主要介紹了cmd輸入python命令無(wú)反應(yīng)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 使用Python生成url短鏈接的方法

    使用Python生成url短鏈接的方法

    這篇文章主要介紹了使用Python生成url短鏈接的方法,短鏈接在如今在微博等社交網(wǎng)站中等是非常常見(jiàn)的功能,需要的朋友可以參考下
    2015-05-05
  • Matlab常見(jiàn)最優(yōu)化方法的原理和深度分析

    Matlab常見(jiàn)最優(yōu)化方法的原理和深度分析

    這篇文章主要介紹了Matlab常見(jiàn)最優(yōu)化方法的原理和深度分析,matlab只是個(gè)軟件,用來(lái)完成機(jī)械的計(jì)算,而如何安排這些計(jì)算,需要用戶掌握最基本的數(shù)學(xué)概念,需要的朋友可以參考下
    2023-07-07
  • python爬蟲(chóng)之教你如何爬取地理數(shù)據(jù)

    python爬蟲(chóng)之教你如何爬取地理數(shù)據(jù)

    這篇文章主要介紹了python爬蟲(chóng)之教你如何爬取地理數(shù)據(jù),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • python簡(jiǎn)單線程和協(xié)程學(xué)習(xí)心得(分享)

    python簡(jiǎn)單線程和協(xié)程學(xué)習(xí)心得(分享)

    下面小編就為大家?guī)?lái)一篇python簡(jiǎn)單線程和協(xié)程學(xué)習(xí)心得(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • django 數(shù)據(jù)庫(kù) get_or_create函數(shù)返回值是tuple的問(wèn)題

    django 數(shù)據(jù)庫(kù) get_or_create函數(shù)返回值是tuple的問(wèn)題

    這篇文章主要介紹了django 數(shù)據(jù)庫(kù) get_or_create函數(shù)返回值是tuple的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • Pytorch 實(shí)現(xiàn)sobel算子的卷積操作詳解

    Pytorch 實(shí)現(xiàn)sobel算子的卷積操作詳解

    今天小編就為大家分享一篇Pytorch 實(shí)現(xiàn)sobel算子的卷積操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python手寫(xiě)選擇排序方式(不用sort)

    python手寫(xiě)選擇排序方式(不用sort)

    這篇文章主要介紹了python手寫(xiě)選擇排序方式(不用sort),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評(píng)論

壶关县| 湘潭县| 沽源县| 周口市| 富宁县| 萨嘎县| 措美县| 巨鹿县| 仙桃市| 泰兴市| 河源市| 大悟县| 巨鹿县| 石渠县| 云霄县| 滦南县| 乐山市| 金阳县| 娄烦县| 农安县| 武夷山市| 浦县| 韶关市| 井陉县| 瑞安市| 大埔县| 宁远县| 视频| 阿城市| 盘锦市| 阿拉尔市| 土默特右旗| 房山区| 东乌珠穆沁旗| 清新县| 五大连池市| 尼玛县| 许昌县| 富源县| 民权县| 越西县|