Tomcat 7中如何将version.jsp调用日志分离至独立日志文件?
在Tomcat 7中单独记录version.jsp的访问日志
当然可以解决这个问题!Tomcat 7的AccessLogValve支持通过条件表达式过滤请求,你只需要在server.xml里配置两个日志阀门:一个负责记录除version.jsp外的所有请求(保留原有主访问日志),另一个专门把version.jsp的请求写入独立日志文件。
具体操作步骤
打开Tomcat安装目录下的
conf/server.xml,找到<Host>节点下原有的AccessLogValve配置(就是生成默认access.log的那个)。修改原有阀门,添加条件过滤掉
version.jsp的请求:<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" condition="%{REQUEST_URI} != '/version.jsp'" />注意:如果你的
version.jsp在特定应用上下文路径下(比如/myapp/version.jsp),记得把/version.jsp替换成完整的请求路径。在同一个
<Host>节点下,新增一个专门的AccessLogValve,只记录version.jsp的请求:<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="version_jsp_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" condition="%{REQUEST_URI} == '/version.jsp'" />这里的
prefix可以自定义,比如叫health_check_log,方便你一眼认出这是健康检查的专属日志。保存
server.xml,重启Tomcat服务即可生效。
额外实用技巧
- 如果需要匹配带参数的
version.jsp请求(比如/version.jsp?foo=bar),可以用contains函数来写条件:condition="%{REQUEST_URI}.contains('/version.jsp')" - 如果你使用了Tomcat的虚拟主机配置,要确保这两个阀门都添加到对应的
<Host>节点下。 - 日志文件会自动按日期滚动(默认行为),无需额外配置滚动策略。
这样配置后,负载均衡器调用version.jsp的请求会单独写入version_jsp_access_log.*.txt,其他正常请求依然保留在原有的主日志文件中,完美解决主日志被健康检查请求充斥的问题!
内容的提问来源于stack exchange,提问作者Mohl
相关产品推荐
相关产品推荐

