我正在尝试在Tomcat 7中记录请求/响应的所有标头。我尝试使用access-log-valve。但正如链接中所提到的,我们只能逐个打印标题。我们必须指定我们需要的每个标头。
EG
pattern="%{User-Agent}i %{Content-Type}i %{Accept}i %{Accept-Encoding}i
%{Accept-Language}i %{Accept-Charset}i %r %h %q"
有没有办法一次记录所有标题,可能使用通配符?
谢谢。
没有开箱即用的方法 - 但是一个简单的选择是运行过滤器。过滤器将您想要的所有标头推送到servlet请求中。然后在模式中使用“%{foo} r”,其中foo是servlet请求中变量的名称。
初始重要提示,特别是对于生产环境:小心启用过滤器,因为它可能会损害您的请求参数编码!所以也许一定要通过首先设置org.apache.catalina.filters.SetCharacterEncodingFilter来设置一切!
从Tomcat 7+开始你应该通过filters来做:
web.xml
<filter>
<filter-name>requestdumper</filter-name>
<filter-class>
org.apache.catalina.filters.RequestDumperFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>requestdumper</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
然后记录它,例如在CATALINA_BASE/conf/logging.properties
中修改这样的特殊日志文件(基于Tomcat 7 docs修改):
## this may likely be your (to-be-updated) orig handlers declaration:
#handlers = \
# 1catalina.org.apache.juli.AsyncFileHandler\
# ,2localhost.org.apache.juli.AsyncFileHandler\
# ,3manager.org.apache.juli.AsyncFileHandler\
# ,4host-manager.org.apache.juli.AsyncFileHandler\
# ,java.util.logging.ConsoleHandler
## ... and you have to add your 1request-dumper:
handlers = \
1request-dumper.org.apache.juli.FileHandler\
,1catalina.org.apache.juli.AsyncFileHandler\
,2localhost.org.apache.juli.AsyncFileHandler\
,3manager.org.apache.juli.AsyncFileHandler\
,4host-manager.org.apache.juli.AsyncFileHandler\
,java.util.logging.ConsoleHandler
## ...
# To this configuration below, 1request-dumper.org.apache.juli.FileHandler
# also needs to be added to the handlers property near the top of the file
1request-dumper.org.apache.juli.FileHandler.level = INFO
1request-dumper.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1request-dumper.org.apache.juli.FileHandler.prefix = localhost_access_log.req-dumps.
1request-dumper.org.apache.juli.FileHandler.encoding = UTF-8
1request-dumper.org.apache.juli.FileHandler.formatter = org.apache.juli.VerbatimFormatter
org.apache.catalina.filters.RequestDumperFilter.level = INFO
org.apache.catalina.filters.RequestDumperFilter.handlers = \
1request-dumper.org.apache.juli.FileHandler
直到Tomcat 6之前你可以使用RequestDumperValve
(如Brian's answer):
将此添加到您的server.xml
:
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
David Lee说添加到你的server.xml
:
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>