You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenAI Python库中启用HTTP请求/响应/头日志记录

如何为OpenAI Python库启用HTTP请求/响应及请求头日志记录

下面提供几种实用的实现方式,覆盖不同场景需求:

方法1:通过环境变量快速开启调试日志

这是最简单的方式,OpenAI库支持通过OPENAI_DEBUG环境变量直接输出完整的HTTP请求、响应及头信息:

终端中设置环境变量运行脚本

export OPENAI_DEBUG=1
python your_script.py

在Python代码中设置环境变量

import os
from openai import OpenAI

os.environ["OPENAI_DEBUG"] = "1"
client = OpenAI(api_key="your-api-key")

# 测试调用触发日志
response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Hello"}]
)

开启后,控制台会自动打印所有HTTP交互细节,包括请求方法、URL、请求头、响应状态码、响应头及请求/响应体。

方法2:配置Python logging模块捕获底层日志

OpenAI v1版本基于httpx实现HTTP请求,httpx会将请求日志输出到httpx日志器。通过配置Python的logging模块,可以精准控制日志级别和格式:

import logging
from openai import OpenAI

# 配置日志格式和级别
logging.basicConfig(
    level=logging.DEBUG,
    format="%(asctime)s [%(levelname)s] %(name)s: %(message)s"
)

# 初始化客户端后,所有HTTP请求日志会自动输出
client = OpenAI(api_key="your-api-key")

# 测试调用
response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Hello"}]
)

如果需要过滤日志内容,可以调整logging.basicConfig的level参数(比如设为logging.INFO只输出关键信息),或者单独配置httpx日志器的级别:

logging.getLogger("httpx").setLevel(logging.DEBUG)

方法3:自定义HTTP客户端实现个性化日志

如果需要完全自定义日志格式、过滤敏感信息(比如隐藏API密钥的完整内容),可以创建自定义的httpx.Client并添加请求/响应钩子:

import logging
import httpx
from openai import OpenAI

# 初始化自定义日志器
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("openai_http")

def log_request(request: httpx.Request):
    # 过滤Authorization头,只保留前缀避免泄露密钥
    headers = dict(request.headers)
    if "Authorization" in headers:
        headers["Authorization"] = headers["Authorization"].split(" ")[0] + " ***"
    
    logger.info(f"=== 请求开始 ===")
    logger.info(f"方法: {request.method} | URL: {request.url}")
    logger.info(f"请求头: {headers}")
    if request.content:
        logger.info(f"请求体: {request.content.decode('utf-8')}")

def log_response(response: httpx.Response):
    logger.info(f"=== 响应开始 ===")
    logger.info(f"状态码: {response.status_code}")
    logger.info(f"响应头: {dict(response.headers)}")
    if response.content:
        logger.info(f"响应体: {response.content.decode('utf-8')}")
    return response

# 创建带钩子的自定义客户端
custom_client = httpx.Client(
    event_hooks={
        "request": [log_request],
        "response": [log_response],
    }
)

# 传入OpenAI客户端
openai_client = OpenAI(api_key="your-api-key", http_client=custom_client)

# 测试调用
response = openai_client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Hello"}]
)

这种方式可以灵活控制日志内容,比如隐藏敏感字段、自定义输出结构,适合生产环境使用。

注意事项

  • 敏感信息防护:日志中可能包含API密钥、用户数据等敏感内容,生产环境中务必过滤或避免记录完整的敏感字段。
  • 旧版本兼容:如果使用的是v0.x版本的OpenAI库(基于requests),可以通过开启requests和urllib3的日志实现类似效果:
    import logging
    logging.basicConfig(level=logging.DEBUG)
    logging.getLogger("requests").setLevel(logging.DEBUG)
    logging.getLogger("urllib3").setLevel(logging.DEBUG)
    
    建议尽快升级到v1版本,旧版本已停止维护。

内容的提问来源于stack exchange,提问作者codesalsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:05:29