要分析Java日志,首先需明确进程身份和日志位置。
ps -ef | grep java命令列出所有Java进程,获取进程ID(PID)、启动命令及参数(如-Dlogging.file.name指定的日志路径)。application.properties)指定,常见文件名包括application.log、catalina.out(Tomcat)等。例如,Spring Boot中可通过logging.file.name=logs/app.log设置日志路径。掌握核心Linux命令可高效处理日志:
tail -f /path/to/logfile.log实时查看日志末尾的新增内容,适合跟踪实时问题(如接口请求、异常抛出)。grep "ERROR" /path/to/logfile.log筛选包含“ERROR”的行,快速定位错误;结合-i忽略大小写(如grep -i "error"),或-A 5显示匹配行后的5行上下文(如grep -A 5 "Exception" logfile.log查看完整堆栈)。grep "ERROR" logfile.log | wc -l统计错误总数,或sort | uniq -c统计不同错误类型的出现次数(如grep "ERROR" logfile.log | sort | uniq -c)。当日志文件过大时,需用logrotate工具分割、压缩旧日志,节省磁盘空间:
/etc/logrotate.conf(全局配置)和/etc/logrotate.d/(应用特定配置,如Tomcat的tomcat配置文件)。/var/log/java/*.log),设置每天轮转、保留7天、压缩旧日志:/var/log/java/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate # 避免重启应用
}
执行logrotate -vf /etc/logrotate.d/java手动触发轮转。对于海量日志或复杂场景,借助工具实现可视化、实时化、自动化分析:
file插件读取/var/log/java/*.log),用grok过滤器解析日志格式(如提取时间戳、日志级别、线程名);合理的日志配置能减少无效信息,突出关键问题:
Logback(性能优于Log4j 1.x,与SLF4J兼容性好),或Log4j 2(支持异步日志、动态配置)。DEBUG:开发环境使用,记录详细流程(如方法入参、返回值);INFO:生产环境默认级别,记录关键流程(如服务启动、接口调用成功);ERROR:记录错误信息(如异常堆栈、业务失败),避免日志过载。pattern配置:%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n%throwable),提高日志可读性。Java应用的性能问题常隐藏在GC日志和线程日志中:
-Xloggc:/var/log/java/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps;grep筛选GC日志(如grep "Full GC" gc.log查看Full GC次数),或使用GCViewer工具可视化(生成GC趋势图、堆内存占用图),判断是否存在内存泄漏(如Full GC频繁且耗时长)。jstack <PID> > thread_dump.log获取线程快照;grep "BLOCKED" thread_dump.log筛选阻塞线程,或使用VisualVM、JProfiler工具可视化线程状态(如死锁、线程池耗尽)。对于微服务或分布式系统,日志分散在多个节点,需用集中式日志管理统一收集、存储、分析:
Filebeat(轻量级日志收集器),将日志发送到Logstash;Logstash解析后存入Elasticsearch,Kibana展示所有节点的日志(如按服务名筛选、跨节点查询错误)。Universal Forwarder收集日志,利用Splunk的强大搜索功能(如index=java_app "ERROR")快速定位跨服务问题。Logback的Filter(如SensitiveDataFilter)或代码中脱敏处理(如String password = "123456".replaceAll(".", "*"))。#!/bin/bash
LOG_FILE="/var/log/java/app.log"
YESTERDAY=$(date -d "yesterday" +"%Y-%m-%d")
ERROR_COUNT=$(grep "$YESTERDAY" $LOG_FILE | grep "ERROR" | wc -l)
echo "Yesterday error count: $ERROR_COUNT" | mail -s "Java App Error Report" admin@example.com
Kibana、Splunk或Logwatch设置告警规则(如错误数超过阈值、Full GC耗时超过10秒),及时通知运维人员处理。