查看 CentOS 上的 Java 编译日志
一 明确编译日志的来源
- 使用javac在服务器本地编译时,日志默认输出到控制台。若未重定向,编译日志不会自动写入文件,需要显式重定向到文件以便后续查看。
- 使用Maven/Gradle等构建工具时,日志由其自身输出(控制台或文件),通常不在 javac 层面单独产生文件。
- 若是运行期报错(如ClassNotFoundException),那属于运行日志,与编译日志不同,需到应用或容器的日志文件中查看。
二 本地使用 javac 时的查看方法
- 将编译输出写入文件并重定向标准错误(javac 的告警与错误通常走 stderr)
- 示例:javac -d target/classes -sourcepath src/main/java src/main/java/com/example/App.java 2>&1 | tee build.log
- 说明:2> 捕获错误流,&1 合并到标准输出,| tee 同时写入控制台与文件。
- 仅保存错误日志:javac … 2> compile_error.log
- 实时查看正在进行的编译输出:tail -f build.log
- 事后检索关键词(如编译失败原因):grep -n “ERROR|错误” build.log
- 多模块或并发构建建议为每次构建使用独立日志:javac … 2>&1 | tee build_$(date +%F_%T).log
三 使用构建工具 Maven 或 Gradle 时的查看方法
- 将构建日志写入文件
- Maven:mvn clean compile -l build.log
- Gradle:gradle compileJava –info --stacktrace > build.log 2>&1
- 实时查看构建日志
- 只关注错误与失败点
- grep -n “ERROR|FAILURE|BUILD FAILED” build.log
- 若构建由systemd托管(如 jenkins、自定义构建服务),可用 journalctl 查看服务日志
- journalctl -u your-build-service.service -f
- 按时间过滤:journalctl -u your-build-service.service --since “2025-11-16 10:00:00”
四 常见位置与快速定位技巧
- 应用或容器日志常见路径
- Tomcat:/opt/tomcat/logs/catalina.out、/opt/tomcat/logs/localhost*.log
- Spring Boot 可执行 Jar:日志通常在应用工作目录或你配置的logging.file.name路径
- 通用应用:安装目录下的 logs/ 子目录(如 /opt/myapp/logs/)
- 系统级与服务级日志
- 系统日志:/var/log/messages、/var/log/secure
- 服务日志:journalctl -u service_name.service
- 查找包含 Java 关键字的日志文件
- grep -R “java|javax” /var/log/ 2>/dev/null
- ls /var/log/.log | grep -i java
- 查看被轮转的旧日志
- 在日志目录执行:ls -lh .gz 或使用 zcat、zgrep 检索压缩包内容(如 zgrep “ERROR” app.log-2025.gz)
五 没有日志时的补救与优化
- 立即补救:重新执行编译并重定向输出到文件(见第二部分),确保后续可审计与回溯。
- 持续采集:为构建或应用配置logrotate,避免日志过大(配置文件位于 /etc/logrotate.d/)。
- 提升可读性:在构建工具或日志框架中设置合适的日志级别(如 Maven 的 -X/–debug,Gradle 的 --info/–debug,或 Logback/Log4j 的 level 配置),便于定位编译期问题。