如何让 Apache 日志的时间戳精确到毫秒?

Apache 默认日志时间只到秒。在 LogFormat 中用 %{ms}T 或自定义时间格式 %{%Y-%m-%d %H:%M:%S}t 加 %{usec_frac}t 可实现毫秒精度。本文给出配置方法。

最佳实践
如何让 Apache 日志的时间戳精确到毫秒?封面

做法:修改 Apache 配置中的 LogFormat,使用 %{begin:...}t 自定义时间格式并加入 %{usec_frac}t(微秒小数部分),即可得到毫秒甚至微秒精度的时间戳。

配置方法

编辑 Apache 配置文件(httpd.conf 或虚拟主机配置),找到或新增 LogFormat:

# 自定义带毫秒的时间格式
LogFormat "%a %l %u %{%Y-%m-%d %H:%M:%S}t.%{usec_frac}t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined_ms

# 应用到访问日志
CustomLog /var/log/apache2/access.log combined_ms
  • %{%Y-%m-%d %H:%M:%S}t:格式化时间到秒;
  • %{usec_frac}t:微秒小数部分(如 .123456),拼接后即毫秒/微秒精度。

改完检查配置并平滑重载:

apachectl configtest
systemctl reload apache2    # 或 httpd

输出效果

192.168.1.1 - - 2024-01-15 10:30:45.123456 "GET /api/users HTTP/1.1" 200 1234 "-" "Mozilla/5.0"

相关:请求耗时也建议记录

# %D:请求处理耗时(微秒);%T:秒
LogFormat "%a ... %D" with_duration

排查性能问题时,%D(处理时长)比单纯的时间戳更有用。

观测云对照

观测云的 Nginx/Apache 集成在采集访问日志时自动解析时间和请求耗时字段,在控制台直接查看延迟分布,不需要手动调日志格式。

常见问题(FAQ)

Q:%t 默认格式是什么?
A:[15/Jan/2024:10:30:45 +0800],精度只到秒,且是英文月份格式,不利于机器解析。

Q:改了格式后旧日志还能用吗?
A:旧日志保持原格式不变,新日志用新格式。下游解析程序需要兼容两种格式或从切换点开始。

Q:Nginx 怎么记毫秒?
A:Nginx 的 $time_iso8601 到秒,$msec 是带毫秒的时间戳(如 1705287045.123),直接加入 log_format 即可。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台