编辑
2023-02-25
学习记录
00
请注意,本文编写于 1204 天前,最后修改于 23 天前,其中某些信息可能已经过时。

目录

日志清理流程
1. 查询系统当前存储占用
2. 当前文件夹的存储占用(MB)
当前文件夹的每个文件的存储占用
3. 搜索指定名称前缀的 log 日志
4. 删除指定名称前缀的 log 日志
5. 快速批量删除指定名称前缀的 log 日志
Docker 相关补充(适用于容器日志)
查看 Docker 存储占用
清理未使用的 Docker 资源(容器、镜像、网络、构建缓存)
仅清理单个容器的日志文件(需 root 或 sudo)
限制容器日志大小(推荐配置,防止再次爆满)
注意事项

日志清理流程

以下是针对 Docker 部署的 Java 项目日志清理的常用命令流程。假设日志文件前缀为 app(请根据实际情况替换),且操作在存放日志的目录下执行。

1. 查询系统当前存储占用

bash
df -h

显示各分区磁盘使用情况(人类可读格式,含单位)。若只看根分区:df -h /

2. 当前文件夹的存储占用(MB)

bash
du -sh

输出当前目录总大小(MB)。

当前文件夹的每个文件的存储占用

bash
du -sh *

输出当前目录每个文件总大小(MB)。

3. 搜索指定名称前缀的 log 日志

bash
find . -type f -name "app*.log"

递归查找当前目录下所有以 app 开头、.log 结尾的文件。可先执行此命令确认待删除文件列表。

或者

bash
ls -la application.log*

4. 删除指定名称前缀的 log 日志

bash
find . -type f -name "app*.log" -delete

安全删除(直接在 find 中删除,无需额外命令)。

或者

bash
rm -v "app*.log"

5. 快速批量删除指定名称前缀的 log 日志

当文件数量极大(数万以上)时,使用 xargs 并行删除效率更高:

bash
find . -type f -name "app*.log" -print0 | xargs -0 rm -f
  • -print0-0 处理文件名中的空格或特殊字符。
  • 若追求极致速度,可加 -P 并行,如 xargs -0 -P 4 rm -f(4 进程并行)。

Docker 相关补充(适用于容器日志)

Java 应用在容器内输出到 stdout/stderr 的日志由 Docker 接管,可能导致磁盘占用过高。可执行以下操作:

查看 Docker 存储占用

bash
docker system df

清理未使用的 Docker 资源(容器、镜像、网络、构建缓存)

bash
docker system prune -a

⚠️ 会删除所有停止的容器、未使用的镜像和网络,请确认不影响正在运行的服务。

仅清理单个容器的日志文件(需 root 或 sudo)

bash
# 获取容器日志路径 LOG_PATH=$(docker inspect --format='{{.LogPath}}' 容器名或ID) # 清空日志 sudo truncate -s 0 $LOG_PATH

限制容器日志大小(推荐配置,防止再次爆满)

docker run 时添加参数:

bash
--log-opt max-size=10m --log-opt max-file=3

或在 docker-compose.yml 中:

yaml
logging: options: max-size: "10m" max-file: "3"

注意事项

  • 先搜索后删除:执行删除前,务必先运行搜索命令确认文件范围无误。
  • 替换前缀:将命令中的 app 换成你的实际日志前缀(如 catalinaapplication)。
  • 递归影响find . 会递归所有子目录,如需限制深度可加 -maxdepth 1
  • 权限问题:如删除失败,检查文件权限或使用 sudo

按需组合上述命令即可完成日志清理。

本文作者:Weee

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!