如何在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的日志实现类似效果:
建议尽快升级到v1版本,旧版本已停止维护。import logging logging.basicConfig(level=logging.DEBUG) logging.getLogger("requests").setLevel(logging.DEBUG) logging.getLogger("urllib3").setLevel(logging.DEBUG)
内容的提问来源于stack exchange,提问作者codesalsa
相关产品推荐
相关产品推荐

