Ubuntu 上 Java 日志常见存放位置与定位方法
常见存放位置
- /var/log/
系统级日志目录。很多以系统服务方式运行的 Java 程序(如通过 systemd 管理的服务)会把日志写入此处,或在此目录下的应用专属子目录中,例如 /var/log/myapp/、/var/log/tomcat9/ 等。文件名常见为 app.log、application.log 或服务名相关名称。若服务使用 syslog/fluentd 等日志代理,也可能在 /var/log/ 下由代理写入。
- 应用工作目录
直接在启动目录(即 System.getProperty(“user.dir”))或其子目录(如 logs/、log/)生成日志,如 /opt/myapp/logs/app.log。命令行前台运行时,若未重定向输出,日志通常只在控制台,需要重定向到文件。
- 临时目录
个别程序或库在缺乏明确配置时,可能把日志写到 /tmp 或 /var/tmp。这类日志易在重启或清理时丢失,生产环境不建议依赖。
- 日志框架配置路径
使用 Log4j 2(log4j2.xml)、Logback(logback.xml)、java.util.logging(logging.properties) 等时,日志路径由配置文件中的 fileName、filePattern 等参数决定,可能位于应用目录、/var/log 或任意可写路径。
快速定位日志路径
- 查看进程启动与参数:
使用 ps -ef | grep java 找到启动命令与工作目录(cwd),据此在工作目录或相对路径下查找 .log 文件。
- 在服务脚本或 systemd 单元中查找:
检查 /etc/init.d/、/etc/systemd/system/ 下的启动脚本或单元文件,关注 ExecStart、WorkingDirectory、StandardOutput、StandardError、以及 Environment 等字段,常能直接看到日志文件路径或被重定向的目标。
- 全盘或应用目录搜索日志文件:
在项目根目录或常见日志目录中搜索,如:
- find /opt/myapp -name “*.log”
- find /var/log -name “myapp*.log”
- 查看配置文件:
在应用配置目录(如 /opt/myapp/conf/)查找 log4j2.xml、logback.xml、logging.properties 等,定位 fileName/filePattern 等输出路径。
常用查看与分析命令
- 实时查看:tail -f /path/to/app.log
- 分页查看:less /path/to/app.log
- 关键字过滤:grep -i “error” /path/to/app.log
- 组合检索:tail -n 200 /path/to/app.log | grep -i “exception”
- 多文件检索:grep -R “timeout” /var/log/myapp/
以上命令适合快速排查异常、观察启动过程和运行期错误。
配置与最佳实践
- 为服务化 Java 应用统一写到 /var/log/应用名/,并确保运行用户对目录有写权限;使用 logrotate 做按日/按大小滚动与保留。
- 在 systemd 服务中优先使用 StandardOutput=journal 或 StandardOutput=file:/var/log/… 显式声明输出,便于集中采集与轮转。
- 避免使用 /tmp 作为持久化日志目录;生产环境建议固定路径并纳入备份与监控。