如何在Tomcat 7中记录请求/响应的所有标头

问题描述 投票:10回答:3

我正在尝试在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"

有没有办法一次记录所有标题,可能使用通配符?

谢谢。

tomcat logging tomcat7
3个回答
4
投票

没有开箱即用的方法 - 但是一个简单的选择是运行过滤器。过滤器将您想要的所有标头推送到servlet请求中。然后在模式中使用“%{foo} r”,其中foo是servlet请求中变量的名称。


2
投票

初始重要提示,特别是对于生产环境:小心启用过滤器,因为它可能会损害您的请求参数编码!所以也许一定要通过首先设置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"/>

1
投票

David Lee说添加到你的server.xml

<Valve className="org.apache.catalina.valves.RequestDumperValve"/>

© www.soinside.com 2019 - 2024. All rights reserved.