使用 logrotate 工具(系统级自动管理)
logrotate 是 Ubuntu 系统自带的日志管理工具,可自动轮转、压缩和删除旧日志,适合大多数 Java 应用场景。
sudo apt-get update && sudo apt-get install logrotate。/etc/logrotate.d/ 下新建应用专属配置(如 /etc/logrotate.d/my-java-app),内容示例如下:/var/log/myapp/*.log {
daily # 每天轮转一次
rotate 7 # 保留最近7个归档日志
compress # 使用 gzip 压缩旧日志
missingok # 若日志文件不存在,不报错
notifempty # 若日志为空,不进行轮转
create 640 root adm # 新日志文件的权限(用户:组)
}
sudo logrotate -f /etc/logrotate.d/my-java-app(强制执行一次,验证配置是否正确)。/etc/cron.daily/logrotate)每日执行,无需额外配置。调整 systemd journald 日志策略(Systemd 管理的服务)
若 Java 应用以 systemd 服务运行(如 Tomcat、Spring Boot 打包的 jar),可通过 journald 限制日志大小和保留时间。
sudo systemctl status systemd-journald(确保服务运行正常)。/etc/systemd/journald.conf(或创建 /etc/systemd/journald.conf.d/50-default.conf),添加以下参数:[Journal]
SystemMaxUse=500M # 日志总大小上限(如500MB)
SystemKeepFree=100M # 磁盘需保留的空闲空间
SystemMaxFileSize=50M # 单个日志文件最大大小
SystemMaxFiles=5 # 保留的日志文件数量
sudo systemctl restart systemd-journald。sudo journalctl --vacuum-size=500M(保留不超过500MB的日志)或 sudo journalctl --vacuum-time=1w(保留最近1周的日志)。配置 Java 日志框架自带归档(应用层精准控制)
通过 Log4j、Logback 等日志框架的配置,实现日志按时间/大小分割、压缩及自动清理,适合需要精细化管理的应用。
<configuration>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/myapp/myapp.log</file> <!-- 当前日志路径 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/myapp/myapp-%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern> <!-- 归档路径(含日期和序号,自动压缩) -->
<maxHistory>7</maxHistory> <!-- 保留最近7天的归档 -->
<maxFileSize>250MB</maxFileSize> <!-- 单个日志文件最大250MB -->
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="ROLLING" />
</root>
</configuration>
<Configuration status="WARN">
<Appenders>
<RollingFile name="RollingFile" fileName="/var/log/myapp/myapp.log"
filePattern="/var/log/myapp/myapp-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d %p %c{1.}[%t] %m%n" />
<Policies>
<TimeBasedTriggeringPolicy /> <!-- 按天分割 -->
<SizeBasedTriggeringPolicy size="250 MB" /> <!-- 超过250MB触发分割 -->
</Policies>
<DefaultRolloverStrategy max="7" /> <!-- 最多保留7个归档 -->
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="RollingFile" />
</Root>
</Loggers>
</Configuration>
注:需将配置文件放置在应用的 resources 目录下,并确保应用有权限写入日志目录。手动清理紧急情况
若日志文件已占满磁盘空间,需立即释放,可通过以下命令快速清理:
sudo rm -f /var/log/myapp/myapp.log(删除当前日志,应用可能需重启以生成新日志)。sudo truncate -s 0 /var/log/myapp/myapp.log(将文件大小截断为0,不影响应用运行)。sudo find /var/log -type f -name "*.log" -mtime +30 -delete(删除30天前的所有 .log 文件)。使用定时任务自动清理
通过 cron 定时执行脚本,定期清理过期日志,避免人工干预。
/path/to/log_clean.sh):#!/bin/bash
# 删除/var/log下超过30天的.log文件
find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} \;
# 可选:压缩剩余日志以节省空间
find /var/log -type f -name "*.log" -exec gzip {} \;
sudo chmod +x /path/to/log_clean.sh。crontab -e,添加以下行(每天凌晨2点执行):0 2 * * * /path/to/log_clean.sh