跳转至

脚本日志 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>

请求示例

GET /console/tail?accessToken=eyJhbGciOiJIUzI1NiJ9... HTTP/1.1
Accept: text/event-stream

响应

结构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 当前前台用户的访问令牌(任一传递方式均可)

请求示例

POST /console/clean?accessToken=eyJhbGciOiJIUzI1NiJ9... HTTP/1.1

响应

结构Resource(直接构造,errcode 取 200 表成功 / 400 表失败,非统一约定,见 ../index.md「统一响应结构」注记)。 data:始终为 null,结果依据 errcodeerrmsg 判断。

成功示例

{
  "errcode": 200,
  "errmsg": "ok",
  "data": null,
  "errors": null
}

失败示例(删除过程抛异常)

{
  "errcode": 400,
  "errmsg": "err",
  "data": null,
  "errors": null
}