You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Temporal Workflow CLI日志时间戳为UTC带Z格式并控制小数位?

问题描述

我正在使用Temporal Workflow CLI 1.1.1版本,通过以下命令启动Temporal服务器:

temporal server start-dev --ui-port <MY PORT NUMBER> --db-filename myfile.db

执行工作流时,看到如下格式的日志:

time=2024-11-03T05:22:15.262 level=WARN msg="Failed to poll for task." service=worker Namespace=temporal-system TaskQueue=temporal-sys-per-ns-tq WorkerID=server-worker@54622@74a6cde0c483@temporal-system WorkerType=WorkflowWorker Error="worker stopping"

日志内容无关紧要,但我希望修改时间戳格式:当前时间戳为美国东部本地时间,我需要将其改为带Z后缀的UTC时间,同时控制秒的小数位数。根据文档尝试了--time-format的relative、iso、raw三个选项,但输出格式无任何变化,请问该如何实现需求?


解决方法

核心原因

你之前尝试的--time-format选项只作用于Temporal CLI自身命令(比如temporal workflow list、temporal task-queue describe)的输出格式,不影响server start-dev启动后产生的server/worker日志——这类日志由Temporal服务端的日志系统控制,和CLI的格式选项无关。

具体实现方案

方案1:直接指定UTC时间日志模板

Temporal基于Zap日志库,支持用Go语言的时间布局字符串定义时间格式。要生成带Z后缀的UTC时间(以保留3位秒小数为例),可以在启动命令中添加--log-format参数,指定结构化日志的时间格式:

temporal server start-dev --ui-port <MY PORT NUMBER> --db-filename myfile.db --log-format '{"time":"%Y-%m-%dT%H:%M:%S.%3fZ","level":"%level%","msg":"%message%","service":"%service%","Namespace":"%Namespace%","TaskQueue":"%TaskQueue%","WorkerID":"%WorkerID%","WorkerType":"%WorkerType%","Error":"%Error%"}'
  • %Y-%m-%dT%H:%M:%S.%3fZ对应UTC时间格式,%3f控制秒的小数位数为3位,可按需改为%1f(1位)或%0f(无小数)
  • 该参数会将日志输出为JSON格式,时间戳直接以UTC+Z的形式生成

方案2:用管道工具转换现有日志

如果需要保留原日志的非结构化格式,可先输出原始日志,再用awk工具转换时间戳:

temporal server start-dev --ui-port <MY PORT NUMBER> --db-filename myfile.db | awk '{
    split($1, t, /[T.=]/);
    cmd = "date -d \""t[2] " " substr(t[3],1,2) ":" substr(t[3],3,2) ":" substr(t[3],5,2) " EDT\" -u +\"%Y-%m-%dT%H:%M:%S." substr(t[4],1,3) "Z\"";
    cmd | getline utc_time;
    close(cmd);
    $1 = "time="utc_time;
    print $0
}'
  • 这段命令会将美国东部时间(EDT)的时间戳转换为UTC带Z的格式,同时保留3位秒小数
  • 若你的本地时区不是EDT,需将命令中的EDT替换为对应时区标识

方案3:通过环境变量全局配置

你也可以设置环境变量TEMPORAL_LOG_FORMAT持久化配置时间格式,无需每次启动都加参数:

export TEMPORAL_LOG_FORMAT='{"time":"%Y-%m-%dT%H:%M:%S.%3fZ","level":"%level%","msg":"%message%","service":"%service%","Namespace":"%Namespace%","TaskQueue":"%TaskQueue%","WorkerID":"%WorkerID%","WorkerType":"%WorkerType%","Error":"%Error%"}'
temporal server start-dev --ui-port <MY PORT NUMBER> --db-filename myfile.db

内容的提问来源于stack exchange,提问作者Saqib Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:37:28