Tomcat日志机制
内部日志
Tomcat 的内部日志默认使用 JULI 组件,使用 java.util.logging 架构,能保证 Tomcat 内部日志与 Web 应用的日志保持独立。
Tomcat 的内部日志也可以利用 Log4j 框架进行配置。
Web应用日志
Tomcat 的Web应用可使用:
- 系统日志 API,java.util.logging (若使用该API,则Web应用之间可以共享其元素)
- Java Servlets 规范所提供的日志 API,javax.servlet.ServletContext.log(…)
java.util.logging(默认)
LogManager 组件能分辨运行在 Tomcat 上的不同 Web 应用,还能针对每一应用进行私有的日志配置。当 Web 应用未从内存中加载时,Tomcat 会给出通知,从而清除相应的引用类,防止内存泄露。但实际Tomcat会使用 JULI 来代替默认的 LogManager 实现。
JULI 默认启用,它支持每个类加载器配置。这意味着可以在下列层级来配置日志:
全局范围:
${catalina.base}/conf/logging.properties 文件通过由启动脚本设置的系统属性 java.util.logging.config.file 来指定。
如果它不可读或没有配置,默认采用 JRE 中的 ${java.home}/lib/logging.properties 文件。
Web 应用范围:
该文件为 WEB-INF/classes/logging.properties
Servlets logging
Tomcat 内部日志能够调用 javax.servlet.ServletContext.log(…) ,从而写入日志消息,其将被记录到一种特定类别中,命名方式如下:
org.apache.catalina.core.ContainerBase.[${engine}].[${host}].[${context}]
Access log
查看日志
- cd home/tomcat/logs
//切换到日志目录
- ls
//查看日志类型
- tail -f catalina.out
//查看运行日志
- tail -n xxx -f catalina.out
//查看最近xxx行日志内容
- Ctrl+c 是退出tail命令
- cat localhost.yyyy-mm-dd.log l grep 关键词
//通过关键词搜索查看日志
- cat localhost.yyyy-mm-dd.log l grep 'xxxx-yy-zz'
//查看固定时间日志
日志分类
1> catalina.out
实时运行日志,指Tomcat的stdout和stderr
包含tomcat运行时的日志及
应用中用system.out打印的内容、应用中使用其他日志框架并配置向console输出的日志:
- 由 java.lang.ThreadGroup.uncaughtException(…) 所输出的未捕获异常。
- 线程转储,如果通过系统信号来请求它们
默认不会自动切割日志
2> catalina.{yyyy-MM-dd}.log
tomcat运行日志,记录tomcat启动和暂停时的内容,会输出到catalina.out,但应用中向控制台输出的日志不会被记录在内。
若未采用log4j,则系统错误信息和打印语句也会被记录在内。
3> localhost.{yyyy-MM-dd}.log
应用初始化时(lfs)未被处理的异常被tomcat捕获后输出的日志,它也包含了tomcat启动和暂停时的运行日志。
4> localhost_access_log.{yyyy-mm-dd}.txt
访问tomcat的日志,记录访问tomcat的请求的所有地址、请求的路径、时间,请求协议以及返回码、状态码、时间、资源等信息,需要配置。
5> commons-daemon.日期.log
利用服务方式启动tomcat作为守护进程的日志记录,因为本机tomcat启动方式是以服务的方式启动的,索引产生这个日志文件记录了服务的启动状态。
7> tomcat7-stderr.日期.log
log4j的错误日志,因此在程序中要合理的捕捉异常。
8> tomcat7-stdout.日期.log (类似于eclipse的控制台的信息)
程序中的System语句打印的日志(包括系统抛出的异常),是不能用打印语句进行系统调试的原因。
日志内容
catalina.{yyyy-MM-dd}.log
十月 20, 2022 11:44:20 上午 org.apache.tomcat.util.digester.SetPropertiesRule begin
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'debug' to '0' did not find a matching property.
十月 20, 2022 11:44:20 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server version: Apache Tomcat/7.0.72
...
信息: Server built: Oct 10 2022 12:12:26 UTC
信息: Server number: 7.0.72.0
信息: OS Name:
信息: OS Version:
信息: Architecture: amd64
信息: Java Home:
信息: JVM Version:
信息: JVM Vendor: Oracle Corporation
信息: CATALINA_BASE:
信息: CATALINA_HOME:
信息: Command line argument: -Dcatalina.home=根路径
信息: Command line argument: -Dcatalina.base=根路径
信息: Command line argument: -Djava.endorsed.dirs=根路径\endorsed
信息: Command line argument: -Djava.io.tmpdir=根路径\temp
信息: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
信息: Command line argument: -Djava.util.logging.config.file=根路径\conf\logging.properties
信息: Command line argument: exit
信息: Command line argument: -Xms3500m
...
commons-daemon.日期.log
[2022-10-20 15:45:49] [info] [1706572] Commons Daemon procrun (1.0.15.0 64-bit) started
[2022-10-20 15:45:49] [info] [1706572] Running 'Tomcat7' Service...
[2022-10-20 15:45:49] [info] [1706632] Starting service...
[2022-10-20 15:45:49] [info] [1706632] Service started in 1617 ms.
[2022-10-20 15:50:57] [info] [1716024] Stopping service...
[2022-10-20 15:50:58] [info] [1716024] Service stop thread completed.
[2022-10-20 15:50:59] [info] [1706572] Run service finished.
[2022-10-20 15:50:59] [info] [1706572] Commons Daemon procrun finished
[2022-10-20 15:51:21] [info] [1711056] Commons Daemon procrun (1.0.15.0 64-bit) started
[2022-10-20 15:51:22] [info] [1711056] Running 'Tomcat7' Service...
[2022-10-20 15:51:22] [info] [1716072] Starting service...
[2022-10-20 15:51:23] [info] [1716072] Service started in 1511 ms.
localhost_access_log.日期.txt
0:0:0:0:0:0:0:1 - - [14/Dec/2017:23:24:03 +0800] "GET /Exam/image/newsLogo.jpg HTTP/1.1" 304 -
0:0:0:0:0:0:0:1 - - [14/Dec/2017:23:24:06 +0800] "POST /Exam/train_findStudyTraincontentByFy.action HTTP/1.1" 200 25
0:0:0:0:0:0:0:1 - - [14/Dec/2017:23:24:06 +0800] "POST /Exam/newsIP_getTypeNews.action HTTP/1.1" 200 258
0:0:0:0:0:0:0:1 - - [14/Dec/2017:23:24:06 +0800] "POST /Exam/newsIP_getTypeNews.action HTTP/1.1" 200 2338
tomcat7-stderr.日期.log/tomcat7-stdout.日期.log
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
#\u5728\u5F00\u53D1\u9636\u6BB5\u65E5\u5FD7\u7EA7\u522B\u4F7F\u7528debug
log4j.rootLogger=error, stdout
### \u5728\u65E5\u5FD7\u4E2D\u8F93\u51FAsql\u7684\u8F93\u5165\u53C2\u6570 ###
#log4j.logger.cn.xm.exam.mapper.exam=TRACE