Как регистрировать все заголовки запроса/ответа в Tomcat 7

Я пытаюсь записать все заголовки запроса/ответа в Tomcat 7. Я попытался использовать access-log-valve. Но, как упоминалось в ссылке, мы можем печатать заголовки только один за другим. Мы должны указать каждый необходимый нам заголовок.

например.

pattern="%{User-Agent}i %{Content-Type}i %{Accept}i %{Accept-Encoding}i
%{Accept-Language}i %{Accept-Charset}i %r %h %q"

Нет ли способа одновременно регистрировать все заголовки, возможно, используется подстановочный знак?

Спасибо.

Ответ 1

Невозможно выйти из строя - но простой альтернативой является запуск фильтра. Фильтр выталкивает все заголовки, которые вы хотите, в запрос сервлета. Затем используйте "% {foo} r" в вашем шаблоне, где foo - это имя переменной в запросе сервлета.

Ответ 2

Важный важный совет, особенно для производственных сред: будьте осторожны при включении фильтра, поскольку это может повредить кодировке параметров вашего запроса ! Так что, возможно, убедитесь, что все правильно настроено, возможно, сначала настройте org.apache.catalina.filters.SetCharacterEncodingFilter !


С Tomcat 7+ вы должны сделать это через фильтры:

  • в 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):

## 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 (как в ответе Брайана):

добавьте это в ваш server.xml:

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

Ответ 3

Дэвид Ли говорит, добавьте это в свой server.xml:

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