开启并设置tomcat的访问日志

首先在默认情况下tomcat是不开启访问日志的。而且tomcat的日志文件路径默认存储在tomcat安装路径下的logs文件夹内。我们首先编辑 ${catalina}/conf/server.xml 文件。 解释 :${catalina} 是 tomcat 的安装目录。本篇中我们编辑文件路径为/usr/local/tomcat6/conf/server.xml。执行命令nano /usr/local/tomcat6/conf/server.xml。


在打开文件后,将文件内


        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>

        -->

的内容<!--与-->去掉,然后进行保存文件。

其中 directory是产生的目录 tomcat安装${catalina}作为当前目录pattern表示日志生产的格式,common是tomcat提供的一个标准设置格式。其具体的表达式为 %h %l %u %t "%r" %s %b。此处解释为:

%h 代表:访问的用户IP地址。

%l  代表:  访问逻辑用户名,通常返回'-'。

%u 代表:  访问验证用户名,通常返回'-'。

%t  代表: 访问日期。

%s 访问返回的http状态码。

%b 访问资源返回的流量。

开启并设置tomcat的访问日志

待服务启动后,在浏览器进行项目的访问。然后我们查看logs文件夹内的localhost_access_log*.txt文件。可以看到已经有访问日志了。


然后我们修改日志格式,设置为我们常用的格式。其中修改pattern内的内容为:%h %l %u %t &quot;%r&quot; %s %b %T。此段格式代表的意思详细解释为:

 %h 访问的用户IP地址。(不是客户端IP地址的哦,要想在Tomcat中要记录来访者真实IP,只需在日志模式中添加如下模式就行了:%{X-Real-IP}i)

 %l 访问逻辑用户名,通常返回'-'。

 %u 访问验证用户名,通常返回'-'。

 %t 访问日期。

 %r 访问的方式(post或者是get),访问的资源和使用的http协议版本。

 %s 访问返回的http状态码。

%b 访问资源返回的流量。

 %T 访问所使用的时间。

1
2
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
    prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b %T" resolveHosts="false" fileDateFormat="yyyy-MM-dd.HH"/>

开启并设置tomcat的访问日志


然后进行重启tomcat,然后进行重新查看日志格式。可以看到已经出现我们要的日志。

开启并设置tomcat的访问日志


fileDateFormat="yyyy-MM-dd.HH",会让日志文件按小时进行滚卷,
比默认的按天滚卷要好些,尤其是访问量大的网站,可以考虑写成fileDateFormat="yyyy-MM-dd.HH.mm",就会是每分钟一个日志文件了。
而且可以分别按Engine, Host, or Context,来记录自己的日志



注:

%h 访问的用户IP地址。(不是客户端IP地址的哦,要想在Tomcat中要记录来访者真实IP,只需在日志模式中添加如下模式就行了:%{X-Real-IP}i)

%h 访问的用户IP地址,如果nginx代理,那记录的就是nginx那台服务器IP,就是内网IP

1
2
3
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
      prefix="localhost_access_log." suffix=".txt" pattern="%{X-Real-IP}i %h  %l %u %t &quot;%r&quot; %s %b %T" resolveHosts="false"
       fileDateFormat="yyyy-MM-dd"/>


上一篇:UITableViewCell的separatorInset属性


下一篇:《伟大的小细节:互联网产品设计中的微创新思维》——3.6 基于当前场景的前因后果推演