Ubuntu Java日志存储位置选择指南
一、选择原则
二、推荐目录与适用场景
| 场景 | 推荐路径 | 权限与归属 | 说明 |
|---|---|---|---|
| 系统服务(systemd) | /var/log/应用名/ | 目录 0755 appuser:appgroup;日志文件 0640 appuser:appgroup | 与系统日志集中管理,配合 logrotate 轮转 |
| 普通用户应用 | ~/logs/ 或 /opt/应用名/logs/ | 目录 0755 用户:用户 | 简单可控,便于备份与迁移 |
| 容器化/短期任务 | /var/log/应用名/ 或挂载卷 /logs | 依据容器用户与卷权限设置 | 便于宿主机统一收集与归档 |
三、在主流日志框架中设置路径
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/myapp/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/myapp/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="FILE"/>
</root>
</configuration>
<Configuration status="WARN">
<Appenders>
<File name="File" fileName="/var/log/myapp/app.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
</File>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler
java.util.logging.FileHandler.pattern=/var/log/myapp/app.log
java.util.logging.FileHandler.limit=50000000
java.util.logging.FileHandler.count=5
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.level=ALL
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
.level=ALL
java -Djava.util.logging.config.file=/opt/myapp/conf/logging.properties -jar myapp.jar
以上示例展示了在 Logback/Log4j2/JUL 中如何将日志输出到指定目录,并配合按时间滚动与保留策略使用。
四、系统级落地与运维要点
sudo mkdir -p /var/log/myapp
sudo chown appuser:appgroup /var/log/myapp
sudo chmod 0755 /var/log/myapp
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 appuser appgroup
sharedscripts
postrotate
systemctl reload myapp.service >/dev/null 2>&1 || true
endscript
}