Appearance
日志明细导出(CSV / XLSX)
控制台「日志」页的导出能力以 HTTP 接口提供,按行导出日志明细(CSV 或 XLSX),供外部对账系统拉取:
- 与控制台日志列表同数据源、同筛选条件
- 2026-09-02 起,在「总 Token」后新增 缓存读 Token / 缓存写 Token / 输入合计 Token 三列;输入合计为跨协议归一口径,与令牌用量查询的
input_tokens_total完全一致,行明细与模型聚合可互核对账
接口定义
| 端点 | 权限 | 数据范围 |
|---|---|---|
GET /api/log/self/export | 普通用户 | 仅本人日志 |
GET /api/log/export | 管理员 | 全站日志 |
鉴权(两个端点相同):
- 控制台登录会话(Cookie)——浏览器里点「导出」按钮即此方式
- 控制台生成的访问令牌:
Authorization: Bearer <访问令牌>(管理员接口需管理员令牌)
注意:这里用的不是模型调用的
sk-令牌;sk-令牌仅用于令牌用量查询与模型调用。
请求示例(curl)
导出最近 1 小时的消费日志(Linux):
bash
START=$(date -d '-1 hour' +%s)
END=$(date +%s)
curl -s -G "https://stonerollai.com/api/log/self/export" \
--data-urlencode "type=2" \
--data-urlencode "start_timestamp=${START}" \
--data-urlencode "end_timestamp=${END}" \
--data-urlencode "format=csv" \
-H "Authorization: Bearer <你的访问令牌>" \
-o usage-logs.csvmacOS / BSD 的 date 用法:
date -v-1H +%s。
请求参数(Query)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
format | string | 否 | csv(默认)/ xlsx |
type | int | 否 | 日志类型:0=全部(默认)、1 充值、2 消费、3 管理、4 系统、5 错误、6 退款 |
start_timestamp | int | 否 | 开始时间(unix 秒),包含;0=不限 |
end_timestamp | int | 否 | 结束时间(unix 秒),包含;0=不限 |
model_name | string | 否 | 模型名,精确匹配(值含 % 时按模糊匹配) |
token_name | string | 否 | 令牌名称,精确匹配 |
group | string | 否 | 分组,精确匹配 |
request_id | string | 否 | 请求 ID,精确匹配 |
upstream_request_id | string | 否 | 上游请求 ID,精确匹配 |
username | string | 否 | 用户名,精确匹配(仅管理员接口生效) |
channel | int | 否 | 渠道 ID(仅管理员接口生效) |
响应
- 成功:文件流下载,文件名
usage-logs-YYYYMMDD-HHMMSS.csv(或.xlsx);CSV 为 UTF-8 编码,首行为中文表头 - 超出限制:JSON
{"success": false, "message": "导出结果超过 100000 行,请缩小筛选范围"}——单次导出最多 100,000 行,请用时间窗分批 - 时间窗为双闭区间:
start_timestamp、end_timestamp均包含在内;分批导出时下一批start_timestamp取上一批end_timestamp + 1,正好衔接不重不漏
导出列
普通用户 17 列;管理员 19 列(多「用户」「渠道」两列,位置见表)。
| 列(按顺序) | 说明 |
|---|---|
| 时间 | YYYY-MM-DD HH:MM:SS(东八区) |
| 类型 | 充值 / 消费 / 管理 / 系统 / 错误 / 退款 |
| 用户(仅管理员) | 用户名 |
| 令牌名称 | 发起请求的令牌名 |
| 模型 | 模型名 |
| 分组 | 请求所用分组 |
| 输入 Token | 原始输入 token(口径随协议,见下节) |
| 输出 Token | 输出 token |
| 总 Token | 输入 Token + 输出 Token(原始值直加,未做归一) |
| 缓存读 Token | 命中缓存(读)token,2026-09-02 新增 |
| 缓存写 Token | 写入缓存 token,2026-09-02 新增 |
| 输入合计 Token | 跨协议归一输入合计,2026-09-02 新增(见下节) |
| 用量/额度 | 消费额度 quota(换算见下) |
| 耗时 | 秒 |
| 是否流式 | 是 / 否 |
| 渠道(仅管理员) | 渠道名 #渠道ID |
| 请求 ID | 平台请求 ID |
| 上游请求 ID | 上游渠道请求 ID |
| 日志内容摘要 | 原日志内容摘要,最长 500 字 |
输入 token 口径(2026-09-02 起提供归一列)
「输入 Token」的语义随通道协议而不同(平台按协议原样落库,不改历史数据):
| 通道协议 | 输入 Token 含义 | 缓存位置 |
|---|---|---|
| OpenAI 兼容 / Gemini 等 | 已含缓存命中(缓存是其子集) | 缓存读 Token |
| Claude 协议(Anthropic 语义) | 不含缓存(净输入) | 读在 缓存读 Token,写在 缓存写 Token |
因此不同来源的「输入 Token」直接相加没有一致口径。跨协议对账请使用归一列:
text
输入合计 Token = Claude 协议行:输入 Token + 缓存读 Token + 缓存写 Token
其余行: 输入 Token(已含缓存,不重复加)- 与令牌用量查询的
input_tokens_total同口径:本接口行明细按模型求和,可与该接口的模型聚合互相核对 - 「总 Token」是原始值直加(未归一),跨协议场景请勿用它对输入侧对账
- 金额(用量/额度)不受影响:平台计费已按协议归一
额度(quota)换算
text
USD = quota / quota_per_unitquota_per_unit 公开可查:GET /api/status → data.quota_per_unit(默认 500000)。建议每次任务开始时取一次并随结果落库。
变更记录
| 日期 | 变更 |
|---|---|
| 2026-09-02 | 「总 Token」后新增 缓存读 Token / 缓存写 Token / 输入合计 Token 三列(跨协议归一口径,见「输入 token 口径」);其余列与参数不变 |
| 2026-06-05 | 接口随日志导出功能首次上线(本文档为初次成文) |