Ubuntu下Java日志分析实操指南
一 定位日志来源与确认框架
journalctl -u yourapp.service -f 实时查看标准输出与错误输出。ps -ef | grep java、jps -l 可帮助定位 PID 与启动命令。二 命令行快速分析
tail -f /var/log/yourapp/app.log;大文件分页:less /var/log/yourapp/app.log。grep -n -i "error\|exception" /var/log/yourapp/app.logsed -n '/2025-12-25 10:00:00/,/2025-12-25 11:00:00/p' /var/log/yourapp/app.loggrep -aic "error" /var/log/yourapp/app.loggrep -n -A5 -B5 "OutOfMemoryError" app.logfind /var/log/yourapp -name "*.log" -exec grep -l "ERROR" {} +。三 线程与GC日志分析
jps -l 或 pgrep -f yourappjstack <PID> > thread_dump.txt;多次抓取(如间隔 5s × 5 次)便于分析阻塞与死锁。thread_dump.txt 中查找 BLOCKED/WAITING 状态及对应线程栈,定位锁持有者与等待链。-Xms512m -Xmx2048m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/var/log/java/gc.logtail -f /var/log/java/gc.log;结合工具(如 GCViewer)评估停顿时间与回收效果。四 日志管理与集中化方案
/etc/logrotate.d/yourapp:/var/log/yourapp/*.log {
daily
rotate 7
compress
missingok
copytruncate
}
五 日志格式与最佳实践
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%line - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app-%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<root level="info">
<appender-ref ref="FILE"/>
</root>
</configuration>
printStackTrace()。