脚本日志 SSE 推送(ScriptLogSseController)¶
为前台调试控制台提供 iScript 运行时日志的实时流式推送(Server-Sent Events, SSE)与日志清空能力。日志文件按前台用户隔离,路径为 <logRootPath>/iscript/<userId>.log。
- 接口类型:REST 资源(
@RestController) - 基址:
${myapps.context-path.runtime:}/console - Tag:脚本日志
公共说明¶
- 鉴权(据源码):
RestSecurityHandlerInterceptor仅注册到/api/runtime/**与/api/rest/bpm/**,本控制器基址为/console/**,不在该拦截器覆盖范围。鉴权由控制器内部完成——Security.getUserIdFromToken(request)从accessToken(query / header / Cookie 任一)解析当前用户Id;GET /tail在用户Id 为空时直接抛RuntimeException(HTTP 500),POST /clean在异常时返回errcode=400。调用方必须为已登录前台用户。 - 响应结构(混合):
GET /tail返回SseEmitter,响应为text/event-stream流(详见该端点说明)。POST /clean返回Resource,但**未走AbstractRuntimeController的统一构造**,直接new Resource(...),成功errcode=200、失败errcode=400(注意此处与平台多数接口的0表成功约定不同)。- 日志读取范围:单次追加读取最多 50KB(
1024*50字节),超过则从文件末尾回退 50KB 开始读取;行编码按ISO-8859-1 → UTF-8转换。 - 状态码:成功 HTTP 200;
GET /tail在未登录时为 HTTP 500。
1. 订阅脚本日志(SSE)¶
订阅当前登录用户的 iScript 日志文件,建立 SSE 长连接。服务端每秒推送一次心跳(事件名 heat),并在日志文件有新增时按行推送(事件名 message)。连接超时时间为 600 秒。
- 接口类型:REST 资源(SSE 流式响应)
- 请求方式:
GET - 请求路径:
/tail(完整:{runtime-context}/console/tail) - 鉴权:是(据源码:控制器内
Security.getUserIdFromToken(request)必须返回非空用户Id) - Tag:脚本日志
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| accessToken | query/header/cookie | string | 是 | 当前前台用户的访问令牌(任一传递方式均可)。Cookie 名 accessToken;亦可放在 query 参数 accessToken 或请求头 accessToken,或 Authorization: Bearer <token> |
请求示例¶
响应¶
结构:Content-Type: text/event-stream 的流式响应(SseEmitter,超时 600 秒)。每条事件包含 id(毫秒时间戳)、name(事件类型)、data(数据体)。客户端断开、超时或出错时,服务端关闭内部调度线程。
事件类型:
事件名 (name) |
触发条件 | data 内容 |
|---|---|---|
heat |
每 1 秒一次(心跳) | .(单字符,用于保持连接活跃) |
message |
日志文件有新增行时 | 日志行文本(按 ISO-8859-1 → UTF-8 解码) |
响应示例(流式帧):
id:1700000000001
event:heat
data:.
id:1700000000500
event:message
data:[INFO] script executed in 12ms
id:1700000001500
event:message
data:[WARN] variable 'foo' is undefined
失败示例(未登录):HTTP 500,无 SSE 流建立,控制台输出 需要登录前台用户,打印的内容为前台用户对应的调试输出,如Printlin(...)等。
2. 清空脚本日志¶
删除当前登录用户的 iScript 日志文件(<userId>.log)。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/clean(完整:{runtime-context}/console/clean) - 鉴权:是(据源码:控制器内调用
Security.getUserIdFromToken(request)解析用户Id) - Tag:脚本日志
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| accessToken | query/header/cookie | string | 是 | 当前前台用户的访问令牌(任一传递方式均可) |
请求示例¶
响应¶
结构:Resource(直接构造,errcode 取 200 表成功 / 400 表失败,非统一约定,见 ../index.md「统一响应结构」注记)。
data:始终为 null,结果依据 errcode 与 errmsg 判断。
成功示例:
失败示例(删除过程抛异常):