最可靠方式是使用%d字段记录微秒级耗时,需在全局配置中定义logformat含%d,再用customlog启用;%d为0或极小表明请求未达应用层,后端真实耗时须由应用透传x-response-time响应头并用%{x-response-time}o捕获。

Apache 访问日志中记录请求耗时,最可靠的方式是使用 %D 字段——它表示请求从接收到响应头发出完毕的总耗时,单位是微秒(整数),精度高、无歧义,适合性能分析。
用 LogFormat 定义含耗时的新格式
在 Apache 主配置文件(如 /etc/apache2/apache2.conf 或 /etc/httpd/conf/httpd.conf)的全局作用域(VirtualHost 外)添加:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" timed_combined
注意几点:
- 整个格式串必须用英文双引号包裹
-
%r、%{Referer}i等含空格或特殊字符的字段,也要单独加双引号 -
timed_combined是你自定义的格式名,要唯一,后续CustomLog会引用它 -
%D是关键:不是%T(秒级截断,精度低),也不是%{msec}t(那是时间戳毫秒部分,和耗时无关)
绑定到日志文件并启用
在同一配置文件中,用 CustomLog 指令启用该格式:
CustomLog ${APACHE_LOG_DIR}/access.log timed_combined
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
常见路径参考:
- Debian/Ubuntu:
/var/log/apache2/access.log - RHEL/CentOS:
/var/log/httpd/access_log
确保写在 <ifmodule log_config_module></ifmodule> 块内更稳妥,因为 mod_log_config 默认已启用,无需额外加载。
验证与排查常见问题
改完配置后执行:
-
apachectl configtest检查语法是否正确 -
systemctl reload apache2(或apachectl graceful)重载服务
如果日志末尾的数字总是 0 或极小(如几十、几百),说明请求未真正进入 Apache 应用处理层——可能被 CDN 截断、SSL 握手失败、静态文件由内核 sendfile 直接返回,或被前置代理提前终止。此时 %D 记录的只是协议解析开销。
若需获取后端真实耗时(如 Java 应用内部执行时间),须由应用写入响应头(如 X-Response-Time),再在 LogFormat 中加 %{X-Response-Time}o 捕获。










