apache本身不直接记录后端脚本执行耗时,但%d可准确记录从接收请求到发送完响应的总服务时间(微秒级),需配置logformat与customlog启用,并确保请求完整进入处理流程。

Apache 本身不直接记录“服务器处理后的请求时长”(即后端脚本执行耗时,如 PHP 脚本运行时间),但可以通过 %D 或 %T 日志格式变量,结合合理配置,准确记录每个请求从接收到响应完成的**总服务时间**——这正是你关心的“处理后时长”的实际体现。
启用并配置自定义日志格式记录响应耗时
Apache 的 LogFormat 指令支持两个关键变量:
-
%D:请求处理总耗时,单位为微秒(例如
1254890表示约 1.25 秒) -
%T:请求处理总耗时,单位为秒(含小数)(例如
1.254)
推荐使用 %D,精度更高,也便于后续日志分析(如 ELK、awk、Prometheus exporter 等)。
在 httpd.conf 或站点虚拟主机配置中添加或修改日志格式:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined_with_time
然后在 CustomLog 中启用该格式:
CustomLog /var/log/httpd/access_log combined_with_time
确保日志变量生效的前提条件
以下三点必须满足,%D 和 %T 才能反映真实处理时长(而非仅网络传输时间):
- Apache 必须已加载
mod_log_config(默认启用,无需额外操作) - 请求不能被早于 Apache 处理层中断(例如:防火墙拦截、TCP 连接超时、SSL 握手失败)——这些情况下
%D仍会记录,但值反映的是连接建立到断开的总时间,非应用处理时间 - 若使用反向代理(如
mod_proxy),%D记录的是 Apache 自身完成代理响应的时间,包含后端响应等待时间;如需单独分离后端耗时,需由后端服务(如 PHP/Java)通过响应头(如X-Response-Time)返回,并用%{X-Response-Time}o记录
验证与调试建议
配置完成后务必重启服务,并快速验证是否写入预期值:
- 执行一次简单请求:
curl -I http://localhost/ - 查看最新 access_log 行,确认末尾出现类似
1254890的六位以上数字 - 对比不同请求(如静态文件 vs PHP 脚本)的
%D值差异,确认其随处理逻辑变化而变化
如果始终为极小值(如 1000–5000),说明请求可能被缓存、重定向或未真正进入处理流程,需检查 mod_rewrite、mod_cache 或后端连通性。










