apache httpd LogFormat不遵守strftime格式

时间:2017-12-27 19:30:55

标签: apache httpd.conf strftime

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

我有一个日志记录,如下所示:

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

LogLevel info
LogFormat "{\
\"logger\": \"common\",\
...
\"timestamp\":\"%{%Y-%m-%dT%H:%M:%S%z}t\",\
}" 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表明这应该有用。

即使我将其简化为单一格式,例如%{%T}t,我也可以获得完整的日期字符串。

%{%T}t ==> "Wed Dec 27 19:24:50 2017"

有趣的是,

%{%usec_frac}t ==> "2017-12-27 19:24:22.443786"

所以他们的自定义令牌似乎有用。我想要的只是一个iso 8601友好的邮票!

任何想法? here's a runnable example with docker。谢谢!

strftime ref:https://linux.die.net/man/3/strftime

1 个答案:

答案 0 :(得分:0)

LogFormat "%h %l %u %{%FT%T%z}t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

发射

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