AlmaLinux上Fastify+Pino日志时区与系统时区不一致的解决求助
解决Fastify+Pino日志时区与系统时区不一致的问题
问题分析
系统时区为Asia/Almaty(UTC+05),但Pino日志输出显示为UTC+06,核心问题出在Pino-Pretty的时间转换配置或环境变量生效逻辑上。
修复方案
1. 直接在Pino-Pretty配置中指定时区
修改Fastify的日志配置,在pino-pretty的选项中添加timezone参数,强制指定时区:
logger: { level: 'info', transport: { target: 'pino-pretty', options: { translateTime: 'yyyy-mm-dd HH:MM:ss Z', timezone: 'Asia/Almaty' }, } }
该参数会跳过系统/进程时区的自动检测,直接使用指定时区转换日志时间。
2. 验证PM2的TZ环境变量是否生效
PM2配置中的TZ可能未正确传递给应用进程,可按以下步骤排查:
- 进入PM2应用的交互式控制台:
pm2 attach <app-name>,执行console.log(process.env.TZ)查看当前进程的时区变量 - 如果变量未生效,调整PM2配置文件,确保
env配置在apps数组的应用对象内:
{ "apps": [ { "name": "your-app-name", "script": "app.js", "env": { "TZ": "Asia/Almaty" } } ] }
修改后重启应用:pm2 restart <app-name>
3. 替换SYS关键字为具体时区标识
若坚持使用translateTime的前缀格式,可将SYS替换为目标时区:
translateTime: 'Asia/Almaty:yyyy-mm-dd HH:MM:ss Z'
这种方式会直接基于指定时区生成时间字符串,无需依赖进程时区。
验证修复
重启应用后触发日志输出,检查日志中的时区是否显示为GMT+0500,与系统时区一致即修复完成。
内容的提问来源于stack exchange,提问作者MapUser
相关产品推荐
相关产品推荐

