现在java程序的日志一般是使用log4j+slf4j 来打日志,并且一般都喜欢用DailyRollingFileAppender模式,就是每天产生一个日志,还有一种是
RollingFileAppender模式,这个模式是按文件大小来保存,可以设置文件个数来保存日志,而DailyRollingFileAppender模式的是不能设置文件个数的,就是说每天会产生一个,直至你的磁盘满了。所以我们希望每天能产生一个日志,方便查看,也希望能够自动删除一些旧的日志,维持磁盘的稳定。
按希望的规则产生日志
log4j已经帮我们做了,我们现在要考虑就只是怎么定时删除日志了,一般两种方式:
1.重写
DailyRollingFileAppender
2.在服务器中创建定时任务自动删除过期的日志
第一种方法在这里就不说了,下面会给出链接和资源,第二种方法就是使用centos的定时任务了。
1.建立shell脚本,
在某个文件夹下,新建文件test_remove_log.sh,
使用touch命令即可: touch test_remove_log.sh
再建立几个log文件测试用,如下:有三个log结尾的文件1.log,2.log,22.log和test_remove_log.sh文件
2.编写sh脚本:
使用vim命令:
vim test_remove_log.sh 打开文件 再按‘i’进行编辑 如下:
#!/bin/sh
find /home/usr001/data/sharedparking/ -name "*2.log*" | xargs rm -rf
再按esc键,退出编辑状态,再输入 '
:wq ' 保存退出,脚本的含义是查询/home/usr001/data/sharedparking/目录下名称包含2.log的文件并删除
在我这里符合条件的是2.log和22.log
3.设置脚本权限
输入:
chmod go+rwx test_remove_log.sh
表示文件
test_remove_log.sh 给群组和其他人 读写执行 的权限
4.创建定时任务
‘crontab -e’命令,按‘i’开启编辑 ,编辑完按esc键,输入‘ :wq ’保存退出;下面的表示每天的15:30执行 test_remove_log.sh脚本
再输入
/bin/systemctl start crond.service 启动定时任务
查询定时任务
crontab -l ,
删除定时任务
crontab -r
等定时任务执行完,可以看到2.log和22.log被删除了。
启动定时任务:/bin/systemctl start crond.service
停止定时任务:/bin/systemctl stop crond.service
重启定时任务:/bin/systemctl restart crond.service
查看定时任务状态:/bin/systemctl status crond.service
这里脚本只是简单的查询文件删除文件操作,通常我们要删除日志,一般是需要删除旧的日志,比如,定时删除7天之前的日志,
就是只保留一个星期的日志 这就需要用到
-mtime
命令,脚本可修改为
#!/bin/sh
find /home/usr001/data/sharedparking/-mtime +7
第一种重写
DailyRollingFileAppender的方法