在Linux系统中查看Tomcat日志是日常运维和问题排查中常见的操作,Tomcat的日志主要分为 catalina.out、catalina.{日期}.log、host-manager.{日期}.log、localhost.{日期}.log、manager.{日期}.log 等文件,catalina.out 是最核心的日志,记录了Tomcat启动、运行过程中的所有信息,而其他按日期分割的日志则记录了特定应用的访问和错误信息,掌握正确的日志查看命令,能够帮助快速定位问题。

基础查看命令
-
cat命令:直接查看整个日志文件内容,适合小文件查看,但大文件会导致终端刷屏。
cat /path/to/tomcat/logs/catalina.out
若需查看特定日期的应用日志,可使用:
cat /path/to/tomcat/logs/localhost.2023-10-01.log
-
more命令:分页显示日志内容,支持空格翻页、q退出,适合中等大小文件。
more /path/to/tomcat/logs/catalina.out
-
less命令:比more更强大的分页工具,支持上下翻页、关键词搜索(/关键词)、前后翻页等,适合大文件查看。
(图片来源网络,侵删)less /path/to/tomcat/logs/catalina.out
操作说明:
- 上/下箭头:逐行滚动
- PageUp/PageDown:逐页滚动
- /关键词:向下搜索关键词
- ?关键词:向上搜索关键词
- q:退出
实时查看日志(动态监控)
在排查实时问题时,需要动态监控日志变化,常用以下命令:
-
tail命令:默认显示文件末尾10行,适合实时查看最新日志。
tail -f /path/to/tomcat/logs/catalina.out
参数说明:
(图片来源网络,侵删)-f:实时跟踪文件更新-n 行数:指定显示末尾行数,如tail -n 100 catalina.out显示末尾100行
-
tailf命令:与
tail -f类似,但更节省资源,适合频繁更新的日志文件。tailf /path/to/tomcat/logs/manager.2023-10-01.log
-
watch命令:定期执行命令并显示结果,可配合grep过滤日志。
watch -n 1 "tail -n 5 catalina.out | grep ERROR"
参数说明:
-n 秒数:指定刷新间隔,此处为每秒刷新一次
日志过滤与分析
-
grep命令:按关键词过滤日志,支持正则表达式。
grep "ERROR" /path/to/tomcat/logs/catalina.out # 查找包含ERROR的行 grep -i "warning" catalina.out # 忽略大小写查找WARNING grep -A 3 -B 3 "Exception" catalina.out # 显示Exception及其前后3行
参数说明:
-i:忽略大小写-c:统计匹配行数-n:显示行号-A/B 行数:显示匹配行后/前的指定行数
-
awk命令:按列处理日志,适合结构化日志分析。
awk '{print $1, $5}' catalina.out # 打印每行的第1列和第5列 awk '/ERROR/{print $0}' catalina.out # 只输出包含ERROR的行 -
sed命令:编辑或替换日志内容,谨慎使用,避免修改原文件。
sed -n '10,20p' catalina.out # 打印第10到20行 sed 's/ERROR/WARNING/g' catalina.out > new_log.log # 替换ERROR为WARNING并保存到新文件
日志管理技巧
-
日志轮转:Tomcat默认按日期分割日志,但需定期清理旧日志避免占用磁盘空间。
find /path/to/tomcat/logs -name "*.log" -mtime +30 -exec rm {} \; # 删除30天前的日志 -
使用logrotate:通过配置logrotate实现自动轮转、压缩和清理。
示例配置文件/etc/logrotate.d/tomcat:/path/to/tomcat/logs/*.log { daily rotate 7 compress missingok notifempty copytruncate }
不同日志文件的作用
| 日志文件名 | 作用说明 |
|---|---|
| catalina.out | 记录Tomcat启动、关闭、运行中的所有信息,包括系统错误、应用异常等 |
| catalina.{日期}.log | Catalina的独立日志,记录Servlet容器的详细信息,如启动参数、配置加载等 |
| localhost.{日期}.log | 访问localhost(默认主机)的日志,包含Web应用的请求和响应信息 |
| manager.{日期}.log | Tomcat Manager应用的日志,记录管理操作的执行情况 |
| host-manager.{日期}.log | Host Manager应用的日志,记录虚拟主机管理操作的日志 |
| localhost_access_log.{日期}.txt | 访问日志,记录HTTP请求的详细信息(如IP、时间、请求方法、状态码等) |
相关问答FAQs
Q1: 为什么使用tail -f查看日志时,新内容不显示?
A: 可能原因包括:
- 文件被重命名或移动(如Tomcat重启后日志轮转),需重新指定新文件路径;
- 权限不足,确保当前用户有读取日志文件的权限;
- 日志被其他进程占用(如
inotify资源耗尽),可尝试使用tailf或--retry参数:tail --retry -f catalina.out。
Q2: 如何快速定位Tomcat日志中的错误堆栈信息?
A: 结合grep和awk提取包含"Exception"或"Error"的行及其上下文:
grep -A 10 -B 5 "Exception" catalina.out | grep -v "^--" # 提取Exception及其前后10行,并去除分隔线
或使用sed打印匹配行的行号及内容:
sed -n '/Exception/,$p' catalina.out | head -n 20 # 从第一个Exception开始打印20行
若需过滤特定异常类型(如NullPointerException),可使用:
grep -A 5 -B 5 "NullPointerException" catalina.out
