如何打印HttpServletRequest和HttpServletResponse

时间:2011-04-02 12:51:41

标签: java http tomcat logging

我想在Tomcat 6中运行的Java webapp中添加请求和响应的日志记录。目的是生成一个日志文件,其输出类似于Wireshark将显示的内容。例如:

GET / HTTP/1.1
Host: www.bing.com
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

我认为最好的方法是使用Filter来捕获传入的HttpServletRequest并包装HttpServletResponse以允许捕获响应内容。

然而,一旦我有一个HttpServletRequest和HttpServletResponse,有一种标准的方法可以将这些对象打印出来,因为它们出现在线上了吗?

2 个答案:

答案 0 :(得分:3)

Tomcat支持所谓的Log Valve - 通过一些格式化,您可以实现您想要的目标。

此外,Logback Access模块旨在提供相同的功能,但使用Logback库。

答案 1 :(得分:0)

我不知道您是否可以显示完全标题,但是如果启用Tomcat的请求转储阀,您将看到所有标头已发送和接收。