分析前需先确定Java日志的存储位置,这取决于应用程序的配置。常见日志框架(如Log4j、Logback)的配置文件(log4j.properties、logback.xml)或Spring Boot的application.properties中会指定日志路径。例如,Spring Boot默认日志文件为application.log(位于src/main/resources同级目录的logs文件夹),Tomcat的日志文件通常为catalina.out(位于/var/log/tomcat)。可通过以下命令快速查找Java进程关联的日志文件:
ps -ef | grep java # 获取Java进程PID及启动参数,从中查找日志路径
CentOS的Linux命令行工具是分析Java日志的基础,适合快速定位问题:
tail -f命令实时跟踪日志文件的最新内容,例如:tail -f /path/to/your/application.log # 替换为实际日志路径
grep命令筛选特定关键词(如ERROR、WARN),快速定位异常:grep "ERROR" /path/to/your/application.log # 筛选ERROR级别的日志
grep -i "exception" /path/to/your/application.log # 忽略大小写筛选异常信息
less或more命令分页查看日志文件,适合分析历史日志:less /path/to/your/application.log
logrotate工具防止日志文件过大,占用磁盘空间。可编辑/etc/logrotate.d/java文件(若不存在则创建),添加以下配置(以/var/log/java/*.log为例):/var/log/java/*.log {
daily # 每天轮转
rotate 7 # 保留7份历史日志
compress # 压缩旧日志
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不轮转
}
测试配置是否正确:logrotate -d /etc/logrotate.d/java,加载配置:systemctl reload logrotate。当日志量较大或需要更深入的分析(如实时可视化、多维度查询),可使用以下工具:
elasticsearch.yml,设置集群名称、节点IP);logstash.conf,定义输入插件(如file读取Java日志)、过滤插件(如grok解析日志格式)、输出插件(elasticsearch发送到Elasticsearch));systemctl start elasticsearch、systemctl start logstash、systemctl start kibana;http://<服务器IP>:5601),配置索引模式(如java-*)即可开始分析。graylog.conf,设置密码 secret、HTTP监听端口);Beats输入,接收Filebeat采集的Java日志);Splunk Universal Forwarder或Log4j的SocketAppender),登录Splunk Web界面即可分析。ERROR或Exception时,需重点查看堆栈跟踪信息(Stack Trace),它会显示异常发生的具体代码位置(如类名、方法名、行号),帮助快速定位问题根源。例如:2025-09-20 14:30:45 ERROR [com.example.controller.UserController] - Failed to fetch user data
java.lang.NullPointerException
at com.example.service.UserService.getUserById(UserService.java:25)
at com.example.controller.UserController.getUser(UserController.java:18)
上述日志表明,UserController的getUser方法调用UserService的getUserById方法时,因NullPointerException导致错误,问题可能出在UserService.java的第25行(未对某个对象进行空值检查)。ERROR日志每5分钟出现一次,且堆栈显示为数据库连接超时,可能是数据库连接池配置不足或数据库服务器负载过高。-Xloggc:/path/to/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps
日志中会记录每次GC的时间、耗时、回收的内存大小(如[GC (Allocation Failure) 65536K->10240K(251392K), 0.0123450 secs]),通过分析GC频率与耗时,可判断是否需要调整JVM堆内存大小(如-Xms、-Xmx参数)。grep、awk等命令,定期分析日志并生成报告。例如,统计每日ERROR日志数量:#!/bin/bash
LOG_FILE="/path/to/your/application.log"
DATE=$(date +%Y-%m-%d)
ERROR_COUNT=$(grep -c "ERROR" "$LOG_FILE")
echo "[$DATE] ERROR count: $ERROR_COUNT" >> /var/log/java_error_report.log
将脚本添加到crontab中,每天凌晨1点执行:0 1 * * * /path/to/script.sh。DEBUG、INFO、WARN、ERROR),避免日志过多或过少。例如,在logback.xml中设置:<root level="INFO">
<appender-ref ref="FILE" />
</root>
<logger name="com.example.controller" level="DEBUG" /> <!-- 针对特定包开启DEBUG级别 -->
生产环境中建议设置为INFO或WARN,开发环境中设置为DEBUG,以平衡日志量与调试需求。