温馨提示×

nginx日志时间怎么调整

小樊
33
2026-08-29 05:09:26
栏目: 编程语言

nginx 里,“日志时间”通常分 两种需求,对应不同的调整方式:


一、调整 nginx 日志中的时间格式(最常见)

nginx 默认日志时间格式是固定的,不能直接修改成任意格式,但可以通过 变量组合syslog 方式调整。

1️⃣ 默认日志时间格式

默认 log_format 中时间一般来自:

$time_local

示例:

08/Sep/2024:10:23:45 +0800

2️⃣ 使用 $time_iso8601(推荐,标准时间)

如果你希望日志时间是 ISO8601 格式(便于日志系统解析):

http {
    log_format main '$remote_addr - $remote_user [$time_iso8601] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

    access_log /var/log/nginx/access.log main;
}

输出示例:

2024-09-08T10:23:45+08:00

不需要改系统时间
推荐用于 ELK / Loki / 日志平台


3️⃣ 自定义时间(高级玩法)

nginx 不直接支持 strftime,但可以用 $time_iso8601 做字符串截取:

log_format main '[$time_iso8601] "$request" $status';

或:

map $time_iso8601 $log_time {
    "~^(?<year>\d{4})-(?<mon>\d{2})-(?<day>\d{2})" "$year$mon$day";
}

log_format main '$log_time "$request"';

二、调整 nginx 日志时区

nginx 不会自己处理时区,它使用的是:

操作系统时区

查看当前系统时区

timedatectl
# 或
date

修改系统时区(示例:改为 Asia/Shanghai)

timedatectl set-timezone Asia/Shanghai

然后 重启 nginx

nginx -s reload
# 或
systemctl restart nginx

⚠️ 注意:

  • 修改的是 系统时间
  • 会影响所有服务(不只是 nginx)

三、如果你是用 Docker / 容器

容器内时区不对

docker run -e TZ=Asia/Shanghai ...

或在 Dockerfile:

ENV TZ=Asia/Shanghai

四、常见问题总结

需求 解决方案
日志时间格式不好看 使用 $time_iso8601
想改成自定义格式 nginx 不直接支持,用 map 截取
时间差 8 小时 修改系统时区
Docker 日志时间不对 设置 TZ 环境变量

五、推荐配置(生产常用 ✅)

http {
    log_format main '[$time_iso8601] $remote_addr "$request" '
                    '$status $body_bytes_sent';

    access_log /var/log/nginx/access.log main;
}

如果你愿意,可以告诉我:

  • ✅ nginx 版本
  • ✅ 是否 Docker
  • ✅ 想改成什么时间格式

我可以给你 完全可直接用的配置

0