Как регистрировать все заголовки запроса/ответа в 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+ вы должны сделать это через фильтры:
<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"/>