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