API 日志
API 日志记录的是 API 程序和 TWS / IB Gateway 之间的通信消息。它适合排查连接、行情、订单、限频和错误码问题,因为它比界面提示更接近真实请求。
它不是默认开启的。需要在 TWS 或 IB Gateway 的 API 设置里勾选 Create API message log file,并在问题复现前设置好日志级别。
如何启用 API 日志
Section titled “如何启用 API 日志”TWS 的入口:
Global Configuration / 全局配置 -> API -> Settings / 设置
操作步骤:
- 打开 TWS。
- 进入
Global Configuration / 全局配置。 - 左侧选择
API -> Settings / 设置。 - 勾选
Create API message log file / 创建 API 消息日志文件。 - 需要排查复杂问题时,再考虑勾选
Include market data in API log file / 在 API 日志文件中包含市场数据。 - 点击
Apply / 应用,再点击OK / 确定。
IB Gateway 的入口类似:进入 Configure -> Settings -> API -> Settings,找到同名或近似名称的日志选项。
这些选项是什么意思
Section titled “这些选项是什么意思”| 英文字段 | 中文意思 | 说明 |
|---|---|---|
Create API message log file | 创建 API 消息日志文件 | 记录 API 程序和 TWS / Gateway 之间的请求、回调和错误消息。 |
Include market data in API log file | 在 API 日志中包含行情数据 | 会让日志包含更多行情内容,文件可能明显变大。 |
Logging Level | 日志级别 | 级别越详细,排查信息越多,但日志也越大。 |
clientId | 客户端编号 | 日志排查时常用来区分不同 API 程序。 |
日常开发不建议长期打开过多日志。更好的做法是:先让问题稳定复现,再打开日志,复现一次后保存日志并关闭过高日志级别。
API 日志文件名通常类似:
api.[clientId].[day].log例如:
api.910.Thu.log| 片段 | 中文解释 |
|---|---|
api | 这是 API 消息日志,不是完整 TWS 平台日志。 |
910 | API 程序连接时使用的 clientId。 |
Thu | 星期几生成的日志文件。 |
.log | 本地日志文件扩展名。 |
如果你同时运行多个脚本,建议给每个脚本固定不同的 clientId。这样日志里更容易看出是哪一个程序发出的请求。
行情日志要谨慎打开
Section titled “行情日志要谨慎打开”Include market data in API log file 对排查行情问题有帮助,但不适合长期打开。
| 场景 | 建议 |
|---|---|
| 只排查连接是否成功 | 不需要打开行情日志。 |
| 排查行情字段、订阅权限、tick 返回异常 | 可以短时间打开。 |
| 长期运行行情程序 | 不建议一直打开,日志会变大。 |
| 准备公开展示界面或粘贴日志 | 先隐藏账户、订单、路径和敏感字段。 |
行情日志可能包含合约、请求参数、错误信息和部分返回内容。公开文档、论坛提问或发给别人排查前,都应该先脱敏。
排查时看什么
Section titled “排查时看什么”API 日志通常配合 Python 程序输出一起看。重点不是把日志整份读完,而是按时间线找到这几类信息:
| 线索 | 作用 |
|---|---|
clientId | 区分哪个 API 客户端发出的消息。 |
reqId | 把请求和回调对应起来。 |
orderId | 排查下单、改单、撤单问题。 |
| 错误码 | 和 error() 回调里的错误码互相印证。 |
| 合约字段 | 检查 symbol、secType、exchange、currency 是否填错。 |
如果只是连接失败,先确认 TWS 是否开启 Socket、端口是否正确、是否限制为同机连接。日志只能帮助定位原因,不能替代这些基础配置检查。