如何更改错误日志中的时间戳格式?

如何更改错误日志中的时间戳格式?

我希望 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 错误日志中使用的格式。我尝试用两种方法解决这个问题:

  1. 配置错误日志以使用或$time_locale。〜$time_iso8601
    找不到可以做到这一点的任何指令。
  2. 配置访问日志时间格式以匹配错误日志时间格式。〜
    我找不到可以做到这一点的任何变量。

我没有拘泥于任何特定的时间格式,但我希望它们在我的错误日志中匹配,因为这样可以在交叉引用访问和错误日​​志条目时节省我的时间。

如果有人知道如何实现上述 1. 或 2.,我很想知道。谢谢。

答案1

遗憾的是,似乎无法改变格式error_log,至少根据

似乎也无法更改访问日志中时间字段的格式,所以我认为纯 NGINX 解决方案不太合适。

也就是说,应该可以将它们都发送到系统日志并希望它使用相同的格式,或者至少为您提供更好的选项。

答案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 中引用它们即可。

相关内容