Ubuntu中Java日志查看与分析指南
Java日志的位置取决于应用配置,常见路径包括:
/var/log/syslog或通过journalctl查看;/var/log/tomcatX/(X为版本号)、应用自身logs/目录(如/opt/app/logs/app.log);log4j.properties(Log4j)、logback.xml(Logback)等配置文件中的appender设置确定(例如logFile.path=/var/log/myapp.log)。cat:显示完整文件内容(适合小文件),如cat /var/log/app.log;less:分页查看大文件,支持上下翻页(空格向下,b向上),如less /var/log/app.log;tail:查看文件末尾(默认10行),实时跟踪日志用-f(如tail -f /var/log/app.log),查看最后N行用-n(如tail -n 100 /var/log/app.log)。grep:搜索关键字(支持正则),如grep "ERROR" /var/log/app.log(查找错误日志)、grep -i "timeout" /var/log/app.log(忽略大小写);wc:统计日志数量,如grep "ERROR" /var/log/app.log | wc -l(统计错误日志行数)。sudo apt install elasticsearch)、Logstash(sudo apt install logstash)、Kibana(sudo apt install kibana);logstash.conf中设置input为文件、filter解析日志格式、output到Elasticsearch);sudo systemctl start elasticsearch logstash kibana),通过Kibana访问http://localhost:5601,创建索引模式即可可视化分析。sudo apt install graylog-server),配置Java应用将日志发送到Graylog(通过GELF/HTTP API),通过Web界面查看日志并设置告警规则。使用logrotate工具自动压缩、删除旧日志:
sudo apt install logrotate;/etc/logrotate.d/my-java-app),内容示例:/var/log/java/*.log { daily # 每天轮替 rotate 7 # 保留7天 compress # 压缩旧日志(.gz格式) missingok # 文件不存在不报错 notifempty # 空文件不轮替 create 640 root adm # 新日志权限 } sudo logrotate -f /etc/logrotate.d/my-java-app(强制执行)。-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/app/gc.log;VisualVM、GCViewer可视化GC趋势,定位内存泄漏或频繁Full GC问题。jstack <pid> > thread_dump.txt(<pid>为Java进程ID,可通过jps查看);FastThread、TDA(Thread Dump Analyzer)在线分析线程状态,定位死锁或长时间阻塞的线程。/var/log/java/hs_err_pid<pid>.log(<pid>为崩溃的Java进程ID);DEBUG(详细日志),生产环境用INFO(关键信息)或WARN(警告),避免过多日志影响性能;PatternLayout包含时间、级别、类名、线程、消息(如%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n),便于快速定位;catch块中用System.out.println(无法控制级别),不要直接拼接字符串(用参数占位符,如logger.debug("User {} logged in", username))。