我希望 Nginx 错误日志中的时间戳与访问日志中的时间戳相同。
错误时间的格式Y/m/d H:i:s
如下,而访问日志允许我选择以下格式:
d/M/Y:H:i:s O
($time_local) 或Y-m-d\TH:i:sO
($time_iso8601)
有什么方法可以设置我的访问日志以使用错误日志格式或反之亦然?
我在 CentOS 7 上运行 Nginx 1.10.1。
更新:
由于我的问题被否决了,我会尽量说清楚——
该access_log
指令允许我定义访问日志中使用的时间戳,尽管我似乎只有两种格式选择。例如:
log_format foo '[$time_local] "$request" $status ..';
log_format bar '[$time_iso8601] "$request" $status ..';
然后我可以将这些格式应用于访问日志,如下所示:
access_log foo.log foo;
access_log bar.log bar;
跟踪所有日志会显示不同的时间格式,例如
==> foo.log <==
[29/Sep/2016:10:20:48 +0100] "GET /fail HTTP/1.1" 404 ..
==> bar.log <==
[2016-09-29T10:20:48+01:00] "GET /fail HTTP/1.1" 404 ..
==> error_log <==
2016/09/29 10:37:52 [error] ..... No such file or directory
都不$time_local
符合$time_iso8601
标准 Nginx 错误日志中使用的格式。我尝试用两种方法解决这个问题:
- 配置错误日志以使用或
$time_locale
。〜$time_iso8601
我
找不到可以做到这一点的任何指令。 - 配置访问日志时间格式以匹配错误日志时间格式。〜
我找不到可以做到这一点的任何变量。
我没有拘泥于任何特定的时间格式,但我希望它们在我的错误日志中匹配,因为这样可以在交叉引用访问和错误日志条目时节省我的时间。
如果有人知道如何实现上述 1. 或 2.,我很想知道。谢谢。
答案1
答案2
https://thatsamguy.com/nginx-iso8601-time-format/
正如@GregL 所述,无法更改错误日志的格式,但使用映射,您应该能够为访问日志创建与错误日志匹配的时间戳。我个人已将我们的访问日志修改为包含毫秒,如上面的链接所示。
您可以将 time_iso8601 分为两部分,即日期和时间。
map $time_iso8601 $date {
~([^T]+) $1;
}
map $time_iso8601 $time {
~\T([0-9:]+)\+ $1;
}
然后只要根据需要在 log_format 中引用它们即可。