Nginx 日志的时间格式默认是固定格式,不能直接通过 log_format 改成自定义字符串(比如 Y-m-d H:i:s),但有几个可行方案,按常见程度给你说明:
Nginx 访问日志里的时间变量是:
$time_local
示例输出:
10/Oct/2024:14:23:55 +0800
这是 Nginx 内部固定格式,不能通过配置改成:
2024-10-10 14:23:55
| 变量 | 示例 | 说明 |
|---|---|---|
$time_local |
10/Oct/2024:14:23:55 +0800 |
默认 |
$time_iso8601 |
2024-10-10T14:23:55+08:00 |
ISO8601,推荐 |
✅ 最常用替代方案:用 $time_iso8601
log_format main '$time_iso8601 $remote_addr $request $status';
2024-10-10 14:23:55)Nginx 保持默认,用以下方式转换:
示例(awk):
awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0 }' access.log
✅ 优点:不影响 Nginx 性能
✅ 工业级做法
如果你用的是 OpenResty:
log_format main '$my_time $remote_addr $request';
set_by_lua_block $my_time {
return os.date("%Y-%m-%d %H:%M:%S")
}
⚠️ 注意:
自己写 Nginx C module 改时间格式
❌ 成本高、维护难
| 需求 | 推荐方案 |
|---|---|
| 日志系统解析 | $time_iso8601 |
| 人工看日志 | 默认 $time_local |
| 完全自定义 | 日志后处理 |
| OpenResty | Lua |
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置。