Tomcat日志配置

Easter79
• 阅读 700

Tomcat简介各位同仁,上期日志维基我们介绍Apache日志的相关内容,本期向大家介绍由Apache软件基金会下属Jakarta项目开发的Servlet容器----Tomcat。从最初发布的Tomcat 3.0.x至今,Tomcat的最新版本为7.0.12 Released。作为轻量级应用服务器,Tomcat普遍应用在中小型系统和并发访问用户不是很多的场合。Tomcat以其资源占有率小、扩展性好、支持负载及邮件服务等功能,深受广大编程员的喜爱。

Tomcat日志信息分为两类:一是运行中的日志,它主要记录tomcat在运行过程中的信息,尤其是一些异常、错误的日志信息;二是访问日志信息,它记录了访问的时间、IP地址、访问资料等相关信息。Tomcat 启动时的系统日志默认是由 JdkLog14Logger 打印,而且若将通用日志组件 (commons-logging)和log4j搭配使用就能输出十分详尽的日志信息。

Tomcat日志配置

在默认安装下,tomcat 不记录访问日志,但Tomcat自带的能够记录的http访问日志很详细,若想要查看tomcat的访问日志,下面配置方法可以使 tomcat 记录访问日志:

编辑 ${catalina}/conf/server.xml 文件写入如下内容(注:${catalina} 为 tomcat 的安装目录)

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

directory="logs"prefix="localhost_access_log." suffix=".txt"

pattern="common" resolveHosts="false"/>

配置实例:

Valve className="org.apache.catalina.valves.AccessLogValve"
directory="E:\Tomcat_log" prefix="longxun_tomcat." suffix=".txt"
pattern=''%h %l %u %t "%r" %s %b "%{Referer}i"''
resolveHosts="false" fileDateFormat="yyyy-MM-dd.HH"/

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

pattern作为其中最主要的参数,其内容中包含的参数也相对丰富许多,下面我们重点介绍下pattern。

通过pattern项的修改,可以改变日志输出内容。Pattern有两种设置方式分别为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="%h %l"

Tomcat是由Apache软件基金会下属的组织开发而出,在访问日志的输出规格上两者有较多的相识之处。

以下是由互联网提供的tomcat访问日志范例:

127.0.0.1 192.168.254.108 - 127.0.0.1 HTTP/1.1 - GET 80&<60; GET /rightmainima/leftbott4.swf HTTP/1.1 304 5563A67708646B6AA299C33D59BE132A [22/Sep/2007:10:08:52 +0800] - /rightmainima/leftbott4.swf localhost 0 0.000

让我们通过上述例子分析,了解下相关的参数:

%a 远端IP地址即访问者的地址为127.0.0.1;

%A 本地IP地址为192.168.254.108;

%b 发送的字节数,不包括HTTP头,这里为0,使用“-”;

%h 由于在编辑server.xml文件时, resolveHosts配置为false,将会显示远端IP地址即127.0.0.1;若resolveHosts配置为true,远端主机的IP地址将通过DNS查询转换成主机名;

%H 请求协议为HTTP/1.1;

%m 访问动作为GET;

%p 请求端口为80端口;

%U 访问的URL地址为/rightmainima/leftbott4.swf;

%shttp的返回值为304;

%S 用户的session ID为5563A67708646B6AA299C33D59BE132A;

%t 日志时间为22/Sep/2007:10:08:52 +0800;

%v 本地服务器名称为localhost;

%T 处理请求时间(以毫秒为单位)

%D 处理请求时间(以秒为单位)

tomcat日志的用途

在简介中,我们提到tomcat日志分为两类,运行日志和访问日志,通过分析tomcat日志的信息,我们不仅能够在tomcat运行异常时定位到故障位置,而且服务被攻瘫之后通过访问日志了解基本攻击信息,进而及时做出应对策略。

当碰上Tomcat比较难缠的Error filterStart,控制台输出信息如下:

2007-3-13 17:43:46 org.apache.catalina.core.StandardContext start
严重: Error filterStart
2007-3-13 17:43:46 org.apache.catalina.core.StandardContext start
严重: Context startup failed due to previous errors

针对filterStart的错误,网上的专业人士给出了各式各样的见解,但是不一定能和你的实际情况挂钩。这时在手足无措下,有些人会将重点放在filter上,极有可能忽略了Tomcat自身的运行日志。当遇上关于Tomcat本身启动问题时,我们可以从logs 目录下的 localhost_log.yyyy-MM-dd.txt查找相关运行日志,通过查看其中的运行日志信息,问题基本上就可以迎刃而解了。

小技巧:修改Tomcat运行日志等级

Tomcat 日志种类分为下面5类:

ØCatalina

ØLocalhost

ØManager

ØAdmin

ØHost-manager

在这五类日志中每类日志的级别分为如下7种:

SEVERE (highest value) > WARNING > INFO > CONFIG > FINE > FINER > FINEST (lowest value)

在了解了Tomcat运行日志的等级划分后,下面我们介绍下日志级别的设定方法:

修改 conf/logging.properties 中的内容,设定某类日志的级别

示例:

设置 catalina 日志的级别为: FINE

1catalina.org.apache.juli.FileHandler.level = FINE

禁用 catalina 日志的输出:

1catalina.org.apache.juli.FileHandler.level = OFF

输出 catalina 所有的日志消息均输出:

1catalina.org.apache.juli.FileHandler.level = ALL

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k