Tomcat 日志概述

一、日志级别的设定
1.tomcat目录下的/conf/logging.properties。
  tomcat 的日志等级有:日志输出级别:SEVERE (最高级别) > WARNING > INFO > CONFIG > FINE > FINER(精心) > FINEST (所有内容,最低级别)
  tomcat  有五类日志 :catalina、localhost、manager、admin、host-manager


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


#可配置项(5类日志):catalina、localhost、manager、admin、host-manager
handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler,
3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

#日志输出为输出到文件和输出到控制台
.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

#日志输出级别:SEVERE (最高级别) > WARNING > INFO > CONFIG > FINE > FINER(精心) > FINEST (所有内容,最低级别)
#配置文件使catalina日志输出级别为FINE
1catalina.org.apache.juli.FileHandler.level = FINE
#catalina文件输出位置
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
#catalina日志前缀为catalina
1catalina.org.apache.juli.FileHandler.prefix = catalina.

#禁用 localhost日志的输出:
2localhost.org.apache.juli.FileHandler.level = OFF
#localhost文件输出位置
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
#localhost日志前缀为localhost
2localhost.org.apache.juli.FileHandler.prefix = localhost.

#输出 manager所有的日志消息均输出
3manager.org.apache.juli.FileHandler.level = ALL
#manager文件输出位置
3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
#manager日志前缀为manager
3manager.org.apache.juli.FileHandler.prefix = manager.

#配置文件使host-manager日志输出级别为FINE
4host-manager.org.apache.juli.FileHandler.level = FINE
#host-manager文件输出位置
4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
#host-manager日志前缀为host-manager
4host-manager.org.apache.juli.FileHandler.prefix = host-manager.

#配置文件使控制台日志输出级别为FINE
java.util.logging.ConsoleHandler.level = FINE
#控制台日志输出格式
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter


#localhost日志文件输出级别为INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO #localhost日志文件输出处理类2localhost.org.apache.juli.FileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler #manager日志文件输出级别为INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO #manager日志文件输出处理类3manager.org.apache.juli.FileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandler #host-manager日志文件输出级别为INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO #host-manager日志文件输出处理类4host-manager.org.apache.juli.FileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.FileHandler 3.tomcat 日志文件详解 catalina.out即标准输出和标准出错,所有输出到这两个位置的都会进入catalina.out,这里包含tomcat运行自己输出的日志以及应用里向console输出的日志。默认这个日志文件是不会进行自动切割的,我们需要借助其他工具进行切割(注意:catalina.out文件如果过大会影响) catalina.{yyyy-MM-dd}.log是tomcat自己运行的一些日志,这些日志还会输出到catalina.out,但是应用向console输出的日志不会输出到catalina.{yyyy-MM-dd}.log,它是tomcat的启动和暂停时的运行日志,注意,它和catalina.out是里面的内容是不一样的。 localhost.{yyyy-MM-dd}.log主要是应用初始化(listener, filter, servlet)未处理的异常最后被tomcat捕获而输出的日志,它也是包含tomcat的启动和暂停时的运行日志,但它没有catalina.2018-09-19.log 日志全。它只是记录了部分日志。 localhost_access_log.2018-09-19.txt:这个是访问tomcat的日志,请求时间和资源,状态码都有记录。 host-manager.2018-09-19.log:这个估计是放tomcat的自带的manager项目的日志信息的,未看到有什么重要的日志信息。 manager.2018-09-19.log : 这个是tomcat manager项目专有的日志文件.

 

二、Tomcat 日志信息分为两类 :
	A、是访问日志信息,它记录的访问的时间,IP ,访问的资料等相关信息。(conf/Servlet.xml配置文件中)
	B、是运行中的日志,它主要记录运行的一些信息,尤其是一些异常 错误 日志信息 。(上节说的conf/logging.properties配置文件和项目内设置)
		1.Cataline引擎的日志文件,文件名catalina.日期.log
		2.Tomcat下默认manager应用日志,文件名manager.日期.log
		3.Tomcat下内部代码抛出的日志,文件名localhost.日期.log(jsp页面内部错误的异常,org.apache.jasper.runtime.HttpJspBase.service类抛出的,日志信息就在该文件!)
		4.控制台输出的日志,Linux下默认重定向到catalina.out




A、访问日志信息
默认 tomcat 不记录访问日志,如下方法可以使 tomcat 记录访问日志编辑 ${catalina}/conf/server.xml 文件 . 注 :${catalina} 是 tomcat 的安装目录把以下的注释 () 去掉即可。
Logger ( 访问日志信息)
	className指定logger 使用的类名,此类必须实现org.apache.catalina.Logger 接口
	prefix指定log 文件的前缀
	suffix指定log 文件的后缀
	timestamp如果为true ,则log 文件名中要加入时间,如下例:localhost_log.2001-10-04.txt
	txtdirectory:指定log文件存放的目录
	resolveHosts    如果这个值是true的话,tomcat会将这个服务器IP地址通过DNS转换为主机名,如果是false,就直接写服务器IP地址
	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"
	%a   这是记录访问者的IP,在日志里是127.0.0.1
	%A  这是记录本地服务器的IP,在日志里是192.168.254.108
	%b  这是发送信息的字节数,不涵括http头,如果字节数为0的话,显示为-
	%B  看tomcat的解释,没看出来与b%的区别,但我这里显示为-1,没想明白,望知道者告知,我把官方解释贴出来吧 Bytes sent,excluding HTTP headers
	%h  这个就是服务器名称了,如果resolveHosts为false的话,这里就是IP地址了,我的日志里是127.0.0.1
	%H  访问者使用的协议,这里是HTTP/1.1
	%l  这个也不太清楚,官方也说这个always return'-' 官方解释:Remote logical username from identd(可能这样翻译:记录浏览者进行身份验证时提供的名字)(always returns '-')
	%m  访问的方式,是GET还是POST,我这是GET
	%p  本地接收访问的端口,呵呵,我这里是80啦
	%q  比如你访问的是aaa.jsp?bbb=ccc,那么这里就显示?bbb=ccc,明白了吧,这个q是querystring的意思
	%r  官方解释:First line of therequest (method and request URI),不是很明白
	%s  这个是http的状态,我这里返回的是304,咱们经常看见访问某个网页报错误500什么的,那也会返回500
	%S  用户的session ID,这个sessionID大家可以另外查一下详细的解释,反正每次都会生成不同的session ID
	%t  这就是时间啦,好像有一个Common LogFormat可以改,不过我没找到
	%u  得到了验证的访问者,否则就是"-"
	%U  访问的URL地址,我这里是/rightmainima/leftbott4.swf
	%v  服务器名称,可能就是你url里面写的那个吧,我这里是localhost
	%D  官方解释:Time taken to processthe request, in millis,应该是访问发生的时间,以毫秒记
	%T  官方解释:Time taken to processthe request, in seconds,应该是访问发生的时间,以秒记


 json格式案例:如:"clientip":"%h"
<Valve className="org.apache.catalina.valves.AccessLogValve" 
directory="logs"  prefix="tomcat_access_log" suffix=".log"
pattern="{"clientip":"%h","ClientUser":"%l","authenticated":"%u",
"AccessTime":"%t","method":"%r","status":"%s","SendBytes":"%b",
"Query?string":"%q", "partner":"%{Referer}i","AgentVersion":"%{User-Agent}i"}"/>


	

B、(项目)运行中的日志
linux中tomcat修改错误日志路径,一般开发将该文件放在项目的缺省目录即源包下,在文件系统里,就是在项目的/src/java目录下,缺省的文件名是log4j.properties,这样项目发布后,就在tomcat的安装目录下的/webapps/项目名称/WEB-INF/classes/log4j.properties  
 
log4j配置文件日志输出路径修改
     log4j配置文件中路径配置一般有三种方法:
(1)绝对路径法:直接配置为系统觉得路径;
(2)相对路径法:
            log4j.appender.logfile.File=../logs/app.log,将日志记录到tomcat下的logs文件夹;
            log4j.appender.logfile.File=logs/app.log,将日志记录到tomcat的bin目录下的logs文件夹;
(3)使用环境变量相对路径法:程序会优先找jvm环境变量,然后再找系统环境变量,来查找配置文件中的变量。
        log4j.appender.logfile.File=${user.dir}/logs/app.log,使用tomcat容器时${user.dir}对应tomcat的bin目录;
        log4j.appender.logfile.File=${user.home}/logs/app.log,${user.home}对应操作系统当前用户目录;
        log4j.appender.logfile.File=${webApp.root}/logs/app.log,${webApp.root}对应当前应用根目录;

完整配置文件如下:
log4j.rootCategory=WARN , R, D,stdout
# Console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.Threshold = INFO 
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %-5p ~ %m%n
# R
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=../logs/log.log          #将log日志记录到tomcat下的logs文件夹
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.Threshold = DEBUG  
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p ~ %m  ~ %l ~ %c ~ %r%n

# D
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=../logs/error.log         #将错误日志记录到tomcat下的logs文件夹
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.Threshold = ERROR             #日志级别
log4j.appender.D.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} %-5p ~ %m  ~ %l ~ %c ~ %r%n

  

posted @ 2022-08-06 15:31  yuanbangchen  阅读(1335)  评论(0编辑  收藏  举报