1. 定位Ubuntu Tomcat日志文件
Tomcat的日志文件默认存储在/var/log/tomcat
(或/var/log/tomcatX
,X为版本号,如tomcat9
)或/opt/tomcat/logs
目录下,主要包括三类核心日志:
conf/server.xml
)中的AccessLogValve
标签,其directory
(日志目录)和prefix
(文件前缀)属性会明确指定访问日志的存储路径。2. 使用命令行工具查看与过滤日志
cat /path/to/logfile
:直接输出整个日志文件内容(适合小文件);less /path/to/logfile
:分页查看(支持上下翻页、搜索,按q
退出);tail -f /path/to/logfile
:实时监控日志新增内容(常用于跟踪线上问题,按Ctrl+C
停止)。grep 'ERROR' /path/to/logfile
:提取所有包含“ERROR”的行(聚焦严重问题);grep -i 'warning' /path/to/logfile
:忽略大小写查找“warning”(关注潜在问题);awk '{print $4}' /path/to/access_log | cut -d: -f1 | sort | uniq -c | sort -nr
:统计访问日志中各时间段的请求数(分析流量高峰)。3. 分析日志中的关键内容
ERROR
(致命错误,如服务崩溃)和WARN
(警告,如资源不足)级别的日志,这些通常是问题的核心线索。YYYY-MM-DD HH:MM:SS
格式开头,通过时间戳可快速关联问题发生的具体时间(如服务器重启、用户操作触发异常)。java.lang.NullPointerException
)及堆栈轨迹(从异常发生点回溯至调用源头),通过分析堆栈中的类名、方法名可定位代码问题(如空指针引用、数据库连接失败)。java.net.BindException: Address already in use
(Tomcat绑定的端口已被其他进程占用,需修改server.xml
中的port
属性或终止占用进程);java.lang.OutOfMemoryError
(JVM堆内存不足,需调整catalina.sh
中的JAVA_OPTS
参数,如-Xms512m -Xmx1024m
);java.lang.NoClassDefFoundError
(缺少依赖的JAR文件,需将JAR包放入WEB-INF/lib
目录或Tomcat的lib
目录);java.sql.SQLException: Access denied for user
(用户名/密码错误)或Communications link failure
(数据库服务未启动、网络不通)。4. 利用日志分析工具提升效率
对于大规模或长期运行的Tomcat日志,手动分析效率低下,可使用以下工具自动化处理:
access_log
和catalina.out
格式);ERROR
级别筛选),支持告警通知(如邮件、Slack)。index=tomcat sourcetype=catalina error
),适合企业级复杂日志分析。5. 日志维护与管理
logrotate
工具自动分割日志文件(避免单个文件过大),编辑/etc/logrotate.d/tomcat
文件,添加如下配置:/var/log/tomcat/*.log {
daily # 每天分割
missingok # 忽略缺失文件
rotate 7 # 保留最近7份
compress # 压缩旧日志
notifempty # 空日志不分割
create 640 root adm # 新日志权限
}
conf/logging.properties
文件,调整对应logger的级别(如将org.apache.catalina.level
从INFO
改为DEBUG
),但生产环境建议保持INFO
或WARN
以减少日志量。