Ubuntu Java日志排查实用流程
一 定位日志来源与输出路径
ps -ef | grep java 或 jps -ltail -f app.log 或 journalctl -u your-app.service -f(systemd 场景)二 调整日志级别与输出格式
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
Logger.getLogger("your.logger").setLevel(Level.DEBUG); 或通过 LogManager 调整。三 从日志定位常见问题的步骤
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/var/log/java/gc.log,用 tail -f 观察 Full GC 频率与停顿。jstat -gcutil <PID> 1000 持续查看 YGC/YGCT、FGC/FGCT 等指标,判断是否频繁 Full GC。jstack <PID> > thread_dump.txt,多次抓取(如间隔 5–10 秒)对比阻塞/等待位置。top -H -p <PID> 定位占用高的线程,将 nid=0x… 转成 10 进制后在 thread_dump 中查找对应线程。四 高效检索与长期治理
五 最小可用排查命令清单
ps -ef | grep java、jps -l、tail -f app.log、journalctl -u your-app.service -fjstack <PID> > thread_dump.txt、jstat -gcutil <PID> 1000-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/var/log/java/gc.log-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/dump.hprof,再用 Eclipse MAT 分析/var/log/syslog、/var/log/messages、dmesg | tail -n 50、free -m、df -h、top/htop