使用logrotate工具(系统自带,推荐)
logrotate是Ubuntu系统自带的日志轮转工具,可定期轮转、压缩和删除旧日志,避免日志文件过大占用磁盘空间。
/etc/logrotate.d/目录下新建Java应用专属配置文件(如my-java-app),内容示例如下(根据实际路径调整):/path/to/your/java/app/logs/*.log {
daily # 每天轮转日志
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(如.gz格式)
missingok # 若日志文件不存在,不报错
notifempty # 若日志为空,不轮转
create 640 root adm # 轮转后创建新日志文件,设置权限
}
sudo logrotate -f /etc/logrotate.d/my-java-app(-f表示强制轮转)。/etc/cron.daily/logrotate),无需额外配置。使用journalctl管理systemd日志(适用于systemd服务)
若Java应用通过systemd启动(如*.service文件),可使用journalctl命令清理systemd管理的日志。
journalctl --disk-usage(显示当前日志总大小)。sudo journalctl --vacuum-time=1w(支持1d、2w等单位)。sudo journalctl --vacuum-size=500M(超过阈值则删除旧日志)。my-java-app.service),可添加-u参数:sudo journalctl --vacuum-time=1w -u my-java-app.service。使用find命令手动清理(快速删除旧日志)
若需快速删除指定目录下的旧日志,可使用find命令结合-mtime(修改时间)或-size(文件大小)参数。
sudo find /var/log/ -type f -name "*.log" -mtime +7 -delete
(将/var/log/替换为Java日志实际路径,如/home/ubuntu/app/logs)sudo find /var/log/ -type f -name "*.log" -exec truncate -s 0 {} \;
(truncate -s 0将文件大小截断为0字节,适用于需保留文件但清空内容的场景)。通过Java代码清空/删除日志(应用层控制)
若需在Java应用中直接管理日志文件,可通过代码实现(适用于自定义日志路径的场景)。
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class LogCleaner {
public static void clearLogFile(String filePath) {
try {
File file = new File(filePath);
if (file.exists()) {
FileWriter writer = new FileWriter(file);
writer.write(""); // 清空内容
writer.close();
System.out.println("日志文件已清空:" + filePath);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
clearLogFile("/path/to/your/java/app.log"); // 替换为实际路径
}
}
public static void deleteLogFile(String filePath) {
File file = new File(filePath);
if (file.exists()) {
file.delete();
System.out.println("日志文件已删除:" + filePath);
}
}
(注:代码需部署到Java应用中,通过定时任务或手动调用执行)。设置定时任务自动清理(长期维护)
若需定期自动清理日志,可结合cron定时任务与上述方法(如find命令或自定义脚本)。
/home/ubuntu/log_clean.sh):#!/bin/bash
# 删除30天前的Java日志文件
find /path/to/java/logs -type f -name "*.log" -mtime +30 -delete
# 清空当前日志文件(可选)
find /path/to/java/logs -type f -name "*.log" -exec truncate -s 0 {} \;
# 记录执行日志
echo "$(date): Java日志清理完成" >> /var/log/log_clean.log
sudo chmod +x /home/ubuntu/log_clean.sh。crontab -e,添加以下行(每天凌晨2点执行):0 2 * * * /home/ubuntu/log_clean.sh
(cron语法说明:0 2 * * *表示每日凌晨2点,/home/ubuntu/log_clean.sh为脚本路径)。注意事项
cp /path/to/logfile.log /backup/),避免误删导致问题排查困难。ps aux | grep java查看Java进程的工作目录,或检查应用配置文件(如log4j.properties、logback.xml、application.properties)中的日志路径设置。/var/log/)需使用sudo提升权限,避免权限不足导致操作失败。