日志文件实现定时分割、删除
前言: 日志对于服务或者项目的维护来说,是一个极其重要的部分。服务的日志如果都写入到同一个日志文件中,会导致日志无限制的不断膨胀
,对于日志内容的查找、问题定位也十分不友好
,通常都会想到将日志文件进行切割输出,例如按照时间每天一个日志文件
、或者按照上限大小切分日志
,也便于项目维护时定位问题,删除长期不必要的冗余日志。
如果是基于一些中间件的服务,通常可以借用其中的日志文件配置来分割日志;又比如像Spring、SpringBoot项目,可以通过集成日志框架
来实现;也有一些服务是单独的,例如minio等,对于这类服务想要实现日志分割输出,可以利用服务器的 脚本
+定时任务
来实现。
扩展:【SpringBoot】【log】 自定义logback日志配置
下面就如何使用 服务器的 脚本
+定时任务
,来实现日志文件的定时分割、删除冗余日志:
日志分割命令脚本
* 按照时间
* 按照大小
1、新建日志分割命令脚本
vim log.sh
日志按照日期分割输出
# !/bin/sh
# 拷贝日志文件到 昨天的log中
cp /opt/minio/nohup.out /opt/minio/logs/minio_`date -d yesterday +%Y%m%d`.log
# 清空nohup.out 日志
cat /dev/null > /opt/minio/nohup.out
日志按照大小分割输出
# !/bin/sh
# 拷贝日志文件到 昨天的log中
split -b 100m -d -a 4 /opt/minio/nohup.out /opt/minio/logs/minio_`date -d yesterday +%Y%m%d`.log
# 清空nohup.out 日志
cat /dev/null > /opt/minio/nohup.out
日志删除命令脚本
删除一定时间的旧日志文件
vim log-delate.sh
# !/bin/sh
# 删除 Linux 系统 /root/logs/ 目录下且是 30 天前的.log 日志文件。
find /opt/minio/logs -mtime +30 -name '*.log' -exec rm -rf {} \;
2、执行 shell 脚本
./log.sh
# 或者
sh log.sh
可能遇到的问题:
1)提示权限不够
-
问题原因:没有对文件赋予可执行权限
-
解决办法:
chmod +755 log.sh
2)提示 “目标‘\r’不是目录”
-
原因分析: 在 linux 终端下,输出\r会什么都不显示,只是把光标移到行首
-
解决办法: 用 vim 打开 sh 脚本文件, 重新设置文件的格式
vim log.sh
# 使用 set 命令修改文件格式
:set ff
# 设置文件格式为 unix
:set ff=unix
# 保存退出
:wq!
3、查看日志文件目录,是否正确分割
定时任务实现日志分割命令
1、添加定时任务
crontab -e
根据自己需要设置,定时执行的时间,保存并退出
# cron表达式后面是脚本位置
# 每5分钟执行一次
*/5 * * * * /opt/log/log.sh
# 每天
0 0 * * * /opt/log/log.sh
2、使定时任务生效
service crond restart
#
systemctl restart crond
3、查看是否生效
定时任务实现日志删除,释放日志空间
1、添加定时任务
crontab -e
例如 每天凌晨 1 点整执行一次脚本
# cron表达式后面是脚本位置
# 每天凌晨 1 点整执行一次
0 1 * * * /opt/log/log-delate.sh
2、使定时任务生效
service crond restart
#
systemctl restart crond