温馨提示×

nodejs linux日志时间不对为何

小樊
41
2026-10-17 05:46:26
栏目: 编程语言

在 Linux 上 Node.js 日志时间不对,通常不是 Node 本身的问题,而是时区 / 时间来源 / 日志库配置导致的。下面按常见原因逐一说明:


一、最常见原因:系统时区不对

1️⃣ Linux 系统时区不对

Node.js 默认使用 系统本地时区。

查看系统时间:

date

查看时区:

timedatectl

如果不是你期望的时区(如 Asia/Shanghai),可以修改:

sudo timedatectl set-timezone Asia/Shanghai

✅ 改完一般 Node 日志时间就正常了(无需重启 Node)。


二、Node 使用的是 UTC,而不是本地时间

很多人以为 Node 日志时间是“错的”,其实是 UTC 时间。

例如:

console.log(new Date());

输出:

2026-01-15T07:00:00.000Z

这是 UTC 时间(+0),不是中国时间(+8)。

解决方法

方法 1:格式化成本地时间

console.log(new Date().toLocaleString());

方法 2:使用日志库(推荐)

const winston = require('winston');

const logger = winston.createLogger({
  format: winston.format.combine(
    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    winston.format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
  ),
  transports: [new winston.transports.Console()]
});

三、Docker 容器里时间不对(非常常见)

如果你在 Docker / K8s 中运行 Node:

date

发现时间不对,那是因为:

  • 容器默认使用 UTC
  • 宿主机时区没挂载进去

解决方式

方式 1:挂载时区

docker run -v /etc/localtime:/etc/localtime:ro your-node-app

方式 2:Dockerfile 设置

ENV TZ=Asia/Shanghai

四、NTP 时间不同步(系统时间本身就错)

系统时间本身就是错的,Node 只是“如实记录”。

检查:

timedatectl status

同步时间:

sudo ntpdate pool.ntp.org
# 或
sudo systemctl restart systemd-timesyncd

五、日志库强制使用 UTC(PM2 / Winston / Pino)

有些日志库默认就是 UTC:

PM2

pm2 env 0 TZ=Asia/Shanghai
pm2 restart all

Pino(默认 UTC)

pino({ timestamp: true })

需手动格式化时间。


六、快速排查清单 ✅

你可以按顺序检查:

  1. date 系统时间对不对?
  2. timedatectl 时区对不对?
  3. 是否在 Docker 里?
  4. Node 日志是不是 Z 结尾(UTC)?
  5. 是否用了日志库且未格式化时间?

七、一句话总结

Node.js 日志时间不对 ≠ Node 有 bug,99% 是时区或 UTC 显示问题。

如果你愿意,可以把:

  • 日志示例
  • 运行环境(物理机 / Docker / K8s)
  • 使用的日志方式(console / winston / pm2)

发出来,我可以帮你精准定位。

0 踩