最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何配置 Apache 记录请求到达服务器时间戳
时间:2026-07-14 09:02:52 编辑:袖梨 来源:一聚教程网
Apache无法获取TCP层SYN时间戳,但%t可记录请求首字节到达用户态的精确时间;配合%3L或%6L可输出毫秒/微秒级本地时间,如“[2026-06-04 16:02:15.789]”,用于计算端到端服务耗时。
Apache 本身不直接提供“请求到达服务器内核 TCP 层”的时间戳(比如 SYN 到达时间),但可以通过 mod_log_config 记录 Apache 开始处理请求时的精确时间,即请求首字节被读入 Apache 用户态进程的时刻——这是最贴近、最实用、且可稳定获取的「请求到达服务层」时间点。
这个时间戳由 %t 格式符提供,配合 strftime 格式控制,能输出带毫秒或微秒精度的本地或 UTC 时间。
使用 %t 记录请求开始处理的时间戳
%t 是 mod_log_config 的内置变量,表示 Apache 接收到请求第一个字节时的本地时间(非响应时间,也不是日志写入时间)。
默认格式为:[10/Jan/2024:14:22:33 +0800](秒级,带时区)
若需更高精度(如含毫秒),需组合使用 %{format}t:
-
%{[%Y-%m-%d %H:%M:%S.%3L}t→ 输出2026-06-04 16:02:15.123(毫秒) -
%{[%Y-%m-%d %H:%M:%S.%6L}t→ 输出2026-06-04 16:02:15.123456(微秒,依赖系统支持)
✅ 注意:
%3L和%6L表示当前时间的毫秒/微秒部分(不是耗时),它和%D(处理耗时)无关,但两者可共存用于计算「请求到达→响应发出」的完整服务窗口。
配置示例(推荐写在 httpd.conf 全局作用域)
LogFormat "%h %{[%Y-%m-%d %H:%M:%S.%3L}t "%r" %>s %b %D" timed_with_msCustomLog "/var/log/apache2/access.log" timed_with_ms
日志效果:
192.168.1.100 [2026-06-04 16:02:15.789] "GET /api/data HTTP/1.1" 200 248 156284
→ 表示该请求于 2026-06-04 16:02:15.789 到达 Apache,处理耗时 156284 微秒(≈156 ms)
补充说明
-
%t记录的是 Apacheaccept()后read()到第一个字节的时间,已排除 TCP 握手与 TLS 解密耗时(这些发生在更底层),但非常接近真实请求抵达服务端的时间。 - 不要用
%{msec}t或%{usec}t:它们是 Apache 启动时的时间戳组件,不是请求到达时间。 - 若需 UTC 时间,改用
%{[%Y-%m-%d %H:%M:%S.%3L}t并确保系统时区设置正确;也可加TZ=UTC环境变量(需重启 Apache)。 - 日志轮转工具(如
logrotate)需支持含小数点的时间字段长度,避免截断。
不复杂但容易忽略。
相关文章
- 具有审计签字权的职业叫什么 蚂蚁新村1月14日答案最新 07-15
- Eagle如何更换主题 07-15
- 《神探杰克鼠》小内侦探成就解锁指南 07-15
- 生存33天末世联赛如何通关 07-15
- 《神探杰克鼠》薄命贝蒂的点点滴滴成就解锁指南 07-15
- 哪种海洋鱼类会建造精美的几何图形巢穴来求偶 神奇海洋1月14日答案 07-15