更改时间格式以获取Apache日志文件中的毫秒数

时间:2018-02-12 03:11:54

标签: apache logging time

我在http访问日志文件模式中使用了%t,它以下列格式提供时间:

[05/Feb/2012:17:11:55 +0000]

有没有办法用毫秒来获得更精确的时间?

Apache mod_log_config表示可以通过以下方式添加格式

  

%{format}以格式给出的格式中应包含的时间   扩展的strftime(3)格式(可能是本地化的)。如果是格式   以begin开头:(默认)时间开始于   请求处理。如果它从结束开始:它是日志的时间   条目写入,接近请求处理结束。在   除strftime(3)支持的格式外,还有以下格式   支持令牌:

sec         number of seconds since the Epoch
msec        number of milliseconds since the Epoch
usec        number of microseconds since the Epoch
msec_frac   millisecond fraction
usec_frac   microsecond fraction
  

这些令牌不能相互组合或strftime(3)   格式化相同的格式字符串。您可以使用多个%{format} t   改为代币。

3 个答案:

答案 0 :(得分:2)

如果你得到一个异常说"非法模式字符"请参考这个。 https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

另请尝试%{H:m:s:S}t

答案 1 :(得分:0)

我在日志中使用了以下模式

\"time\":\"%{%usec_frac}t\"

这将导致:

"time":"2018-07-04 06:09:36.066559"

它正在AWS EC2上的Apache Httpd 2.4中运行

答案 2 :(得分:0)

可以在here中找到Apache2日志文件格式的定义。

按照书面规定,您可以将%{format}t与以下各项结合使用:

Format      Description
msec_frac   millisecond fraction
usec_frac   microsecond fraction

或使用strftime(3):

Format Description
%T     The time in 24-hour notation (%H:%M:%S).
%F     Equivalent to %Y-%m-%d (the ISO 8601 date format).
...

有关所有可能的占位符,请参见strftime(3) documentation

这意味着例如:

  • %{usec_frac}t> 863572
  • %{%Y-%m-%d %T}t> 2020-02-10 08:49:19

组合:

  • %{%Y-%m-%d %T}t.%{usec_frac}t> 2020-02-10 08:49:19.863572