apache httpd LogFormat 不支持 strftime 格式

Posted

技术标签:

【中文标题】apache httpd LogFormat 不支持 strftime 格式【英文标题】:apache httpd LogFormat not honoring strftime format 【发布时间】:2018-06-08 10:06:17 【问题描述】:

我的 httpd 日志中需要一个 8601 时间戳,但 httpd 似乎没有遵守其时间格式合同。我正在使用 apache httpd 2.4.6。

我有一个如下的日志记录配置:

ErrorLogFormat "\
\"level\": \"%l\",\
...
\"timestamp\":\"%%Y-%m-%dT%H:%M:%S%zt\"\
"
ErrorLog /dev/stderr

LogLevel info
LogFormat "\
\"logger\": \"common\",\
...
\"timestamp\":\"%%Y-%m-%dT%H:%M:%S%zt\",\
" combined

CustomLog /dev/stdout combined

如您所见,这是一个紧凑的 json 布局(是的,可能没有完美转义)。

观察时间戳字段。当我登录时,日志消息如下所示:

"level": "notice", ... ,"timestamp":"Wed Dec 27 19:16:05 2017"

httpd 没有按照指定的方式尊重或正确格式化我的时间戳。文档https://httpd.apache.org/docs/current/mod/mod_log_config.html#formats 建议这应该可行。

即使我将其简化为单一格式,例如 %%Tt,我也得到了上面的完整日期字符串。

%%Tt ==> "Wed Dec 27 19:24:50 2017"

有趣的是,

%%usec_fract ==>"2017-12-27 19:24:22.443786"

所以他们的自定义令牌似乎有效。我想要的只是一张符合 ISO 8601 标准的邮票!

有什么想法吗? here's a runnable example with docker。谢谢!

strftime 参考:https://linux.die.net/man/3/strftime

【问题讨论】:

***.com/questions/39217417/… 【参考方案1】:
LogFormat "%h %l %u %%FT%T%zt \"%r\" %>s %b \"%Refereri\" \"%User-Agenti\"" combined

发射

127.0.0.1 - - 2021-03-09T19:07:07+0000 "GET / HTTP/1.1" 200 28 "-" "curl/7.61.1"

【讨论】:

以上是关于apache httpd LogFormat 不支持 strftime 格式的主要内容,如果未能解决你的问题,请参考以下文章

APACHE访问日志格式 和 LogFormat语法

Linux9.9Apache日志

Linux-LNMP-Apache访问日志

Apache httpd 与nginx及tomcat的区别

org.apache.log.format.Formatter这个类在哪

Apache 配置访问日志