Tomcat日志管理(二)

日志的分类

Tomcat 的日志大致可以分为运行日志和访问日志两类 :
  • 运行日志用来记录系统运行过程中产生的一些日志信息,包括一些未处理异常的打印信息以及Web应用的打印信息 。
  • 访问日志记录访问服务器的请求信息,包括:访问客户端的IP地址、访问时间、请求的协议和类型、请求地址、响应状态等信息。
Tomcat 生成的日志文件默认会保存到 $CATALINA_HOME/logs 目录,通常会包含以下几个按照日期进行分割的日志文件:
  localhost.1986-10-07.log   // 本地主机运行时产生的日志文件
  catalina.1986-10-07.log     // Tomcat 引擎在运行时产生的日志文件
  manager.1986-10-07.log    // Tomcat 自带的 manager 项目运行时产生的日志文件
  host-manager.1986-10-07.log    // Tomcat 自带的 host-manager 项目运行时产生的日志文件
  localhost_access_log.2016-10-01.txt   // Tomcat 访问记录的日志文件

访问日志配置

官方文档地址:http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html
Tomcat 中访问日志的开启和关闭通过修改 $CATALINA_HOME/conf/server.xml文件来进行配置。
去掉下面配置片段中的<!-- -->注释标签即可开启记录访问日志。
<!--
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
-->
访问日志 Valve 元素的可配置属性包括以下几项:
className  // 使用的Java 实现类类名,如果要使用缺省的访问日志值需将该项配置为 org.apache.catalina.valves.AccessLogValve 。

directory     // 日志的存放目录,默认值为 $CATALINA_BASE/logs 。

encoding     // 记录日志所使用的字符集,默认使用当前操作系统的缺省字符集。

pattern        // 日志输出的内容格式。

prefix         // 日志文件的文件名前缀,默认使用 access_log. 作为前缀,该值为空字符串表示无后缀。

suffix          // 日志文件的文件名后缀,该值为空字符串表示无后缀。

resolveHosts  // 是否需要将服务器或远程主机的IP地址通过DNS转换为相应的主机名,默认 false 。

rotatable  // 是否需要按天分割日志,默认值为 true ,生成的文件命为 prefix(前缀)+ 日期 + . +suffix(后缀)。

condition  // 是否开启条件日志,仅当ServletRequest.getAttribute("[属性名]") 值为空的时候才打印日志。

fileDateFormat  // 日志分割的时间格式,默认值为 yyyy-MM-dd 。

buffered  // 是否启用日志缓冲打印。
其中,通过配置 pattern 属性的值可以改变访问日志输出的内容和格式,Tomcat 为了简化配置为该项预先定义了"common"和"combined" 两个标准值。
common = %h %l %u %t %r %s %b
combined = %h %l %u %t %r %s %b %{Referer}i %{User-Agent}i
pattern 也可以根据需要自己定义,定义格式为: pattern = "%field1 %field2...%fieldN"。
pattern 的可选字段包括以下字段,
%a - 访问的远程主机的IP地址
%A - 本地服务器的IP地址
%b - 发送的字节数,不包括HTTP请求头,为 0 显示 -
%B - 发送的字节数,不包括HTTP请求头
%h - 远程主机名,如果 resolveHost = false ,显示远程主机的IP地址
%H - 请求协议
%l - 获取到的远程逻辑用户名,总是 - 
%m - 请求类型,GET、POST,等等
%p -接收请求的本地端口号
%q - 请求所携带的参数,以 ? 开头
%r - 请求的第一行,包含请求类型和请求 URI
%s - HTTP请求的响应状态码
%S - 请求中的用户SESSION ID
%t - 请求日期和时间
%u - 授权的远程用户,不存在则为 - 
%U - 请求URL
%v - 本地服务器名
%D -处理请求所耗费的时间,以毫秒为单位
%T - 处理请求所耗费的时间,以秒为单位
%I - 请求的线程名
例如以下请求日志:
192.168.12.2 - - [07/Mar/2018:09:49:55 +0800] "GET /logHello/test HTTP/1.1" 200 -

此外,pattern 还可以从 ServletRequest 的 COOKIE 、请求头、SESSION 中获取信息,采用如下格式:
%{xxx}i  // 从请求头中获取 xxx 的值
%{xxx}o  // 从响应头中获取 xxx 的值
%{xxx}c  // 从COOKIE中获取 xxx 的值
%{xxx}r  // 从请求参数中获取 xxx 的值
%{xxx}s  // 从SESSION中获取 xxx 的值
例如 ,%{Referer}i 表示是从哪个页面链接跳转到的此页面,%{User-agent}i 表示远程用户所使用的代理(浏览器内核)。

关闭catalina.out

当Tomcat 运行在 UNIX 系统上时,控制台输出的日志内容会被同时写入到 catalina.out 文件中,随着 Tomcat 运行时间越来越长, catalina.out 文件也会变的越来越大,占用大量的硬盘空间。
可以通过修改 catalina.sh 启动脚本来禁止将日志输出到 catalina.out
将
 if [ -z "$CATALINA_OUT" ] ; then CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out 
修改为
if [ -z "$CATALINA_OUT" ] ; then CATALINA_OUT=/dev/null


猜你喜欢

转载自blog.csdn.net/pengjunlee/article/details/79478633