LogFormat 是 Apache HTTP Server 的日志格式配置指令,用于定义 access log 输出格式,常见于反向代理 Java 应用的场景;其语法为 LogFormat "%format_string" nickname,支持 %h、%{X-Forwarded-For}i、%t、%r、%D 等关键格式符,配合 CustomLog 使用,不适用于 Java 应用内部日志。

LogFormat 是 Apache HTTP Server 的配置指令,用于定义访问日志(access log)的输出格式,并非 Java 或 Apache Commons Logging / Log4j 等 Java 日志框架中的概念。Java 应用本身不使用 Apache 的 LogFormat;它属于 Apache httpd(即 Web 服务器)的配置语法,常用于与 Java 应用共存的反向代理场景(如用 httpd 做前端,后端是 Tomcat)。下面解析其常用参数及含义。
LogFormat 基本语法
在 Apache 配置文件(如 httpd.conf 或 apache2.conf)中,格式为:
LogFormat "%format_string" nickname
其中 %format_string 是由普通字符和以 % 开头的格式符组成;nickname 是该格式的别名,供 CustomLog 指令引用。
立即学习“Java免费学习笔记(深入)”;
常用格式符(% 开头)及含义
以下是最常用于 Java 后端服务日志分析的关键格式符:
- %h:客户端 IP 地址(未解析主机名),若经代理(如 Nginx、httpd 自身做反向代理),需配合 mod_remoteip 才能获取真实用户 IP
- %{X-Forwarded-For}i:读取请求头中的 X-Forwarded-For 字段,常用于穿透代理链获取原始客户端 IP(需确保代理可信并已设置该头)
- %l:远程逻辑用户名(RFC 1413 ident 查找结果,几乎总为“-”,基本不用)
- %u:认证后的远程用户(如使用 Basic Auth),未认证则为“-”
- %t:请求时间,格式为 [10/Oct/2024:13:55:36 +0800](注意含时区)
- %r:首行请求行,例如 "GET /api/users?id=123 HTTP/1.1"(含方法、路径、协议)
- %>s:响应状态码(如 200、404、500),> 表示最终发送给客户端的状态(区别于内部重定向中间码)
- %b:响应体字节数(不含响应头),为“-”表示响应体为空;%B 强制输出数字(空时为 0)
- %{Referer}i:请求头 Referer 值,记录来源页面(注意拼写是 Referer,非 Referrer)
- %{User-Agent}i:请求头 User-Agent,标识客户端类型(浏览器、curl、Java HttpClient 等)
- %D:请求处理总耗时,单位为微秒(microseconds),适合性能监控(如 125489 表示约 125ms)
- %T:同 %D,但单位为秒(小数,精度低,一般用 %D 更准)
- %{X-Real-IP}i:常见于 Nginx 透传的真实 IP 头,可替代或补充 X-Forwarded-For
典型 Java 代理场景推荐格式
当 Apache 作为 Tomcat 前端反向代理时,建议记录真实 IP、接口路径、状态、耗时和用户代理:
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" java-prod
然后启用日志:
CustomLog logs/java-access.log java-prod
说明:该格式优先取 X-Forwarded-For(兼容多级代理),同时保留耗时 %D 便于定位慢接口,也包含 User-Agent 方便识别是否为 Java 客户端(如 Apache-HttpClient/4.5.14)。
注意事项
- Apache 不解析 Java 应用内部日志(如 logback.xml 中的 pattern),LogFormat 仅控制 httpd 自身 access_log
- 若未启用 mod_headers 或未配置代理头传递,%{X-Forwarded-For}i 将为空或不可信
- 敏感信息(如 token、手机号)切勿直接记入 access log,避免泄露;可通过 SetEnvIf + env= 参数过滤
- 中文路径或特殊字符可能被 URL 编码,%r 中显示为 %E4%B8%AD%E6%96%87,需解码分析

















