使用tomcat,搭建完个人网站后,默认记录来访游客的信息是十分有限的,主要有ip和路径以及方法等。 
 有时候为了获取更多来访信息,比如请求的头部信息,这个时候就需要我们手动配置log了。

开始

进入Tomcat的根目录,然后 ---> conf ---> context.xml ,修改这个context.xml文件,在它Context标签内加上下面这段代码

       <Valve className="org.apache.catalina.valves.AccessLogValve"
                 directory="logs" prefix="headers" suffix=".txt"
                 pattern="%t  ---  %a  ---  %U  ---  User-Agent:%{User-Agent}i  ---  Cookie:%{Cookie}i " resolveHosts="false" />

其中directory是文件目录,文件前缀为headers,后缀为.txt,表明为文本文件,然后关键在于pattern这一段了:

里面就是日志记录的格式,这里就根据个人喜好来自定义了; 百分号%加上指定字母有特定的含义,比如%t就代表访问的时间,%a表示来访者的ip, %U为访问的路径。 需要注意的是%{header}i 指请求的对应头部,如%{User-Agent}i 就代表user-agent头部,如果请求中没有的话,它就为空。 这里有个问题,即没有直接显示访问请求中全部头部的操作,用StackOverflow一哥们的话说就是

There's no way out of the box

翻译过来就是: 没有开箱即用的方法。非要实现只能另外想办法了。

这里附上pattern中相应的字母代表的含义


  • %a - 远程IP地址
  • %A - 本地IP地址
  • %b - 发送的字节数,不包括HTTP头,或“ - ”如果没有发送字节
  • %B - 发送的字节数,不包括HTTP头
  • %h - 远程主机名
  • %H - 请求协议
  • %l (小写的L)- 远程逻辑从identd的用户名(总是返回' - ')
  • %m - 请求方法
  • %p - 本地端口
  • %q - 查询字符串(在前面加上一个“?”如果它存在,否则是一个空字符串
  • %r - 第一行的要求
  • %s - 响应的HTTP状态代码
  • %S - 用户会话ID
  • %t - 日期和时间,在通用日志格式
  • %u - 远程用户身份验证
  • %U - 请求的URL路径
  • %v - 本地服务器名
  • %D - 处理请求的时间(以毫秒为单位)
  • %T - 处理请求的时间(以秒为单位)
  • %I (大写的i) - 当前请求的线程名称

上面添加完成后,重启Tomcat,之后,在相应目录就会生成之前你定义的文件,我这里就是在conf目录下多了个headers.----.--.--.txt,-代表相应日期。随便访问下网站,就会发现里面一下多出了好多预期的内容:

image

cookie我也懒得打马赛克了,问题不大(●'◡'●)

如果想继续深入了解的话, 可以点击这里