思路
一般来说,日志文件都是按照日期来命名的,例如这样: 21_03_01.log
。
每一个日志文件只记录当天某个功能的日志信息,这种做法方便于定为错误。
通过日志文件的属性——最后修改时间,可以得知日志文件记录的是哪一天的日志,距离现在过去多少天了。
当每天的日志量不多,可以考虑保存最近30天的日志量,保存再多也没有意义。
当每日的日志量很多的话,出于存储空间的考虑,可以考虑保存最近7天的日志量。
使用PHP删除日志文件
需要删除日志文件的时候,通过web端手动调用接口 或者 通过 CLI 的方式,自动定时的调用接口,删除日志文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| public function delLogs($day=30) { if($day < 8) { echo "保留不少于一个星期的日志文件"; die; } $logDir = realpath(LOG_PATH); $this->delLogs2($logDir,$day); }
public function delLogs2($logDir,$day) { $dh = opendir($logDir); if($dh){ while($file = readdir($dh)) { if($file == '.' || $file == '..') continue;
$filePath = $logDir.'/'.$file; if(is_file($filePath)) { if(filemtime($filePath) < strtotime("-{$day} days")) { echo "file={$filePath}"; unlink($filePath); } } else $this->delLogs2($filePath,$day); } closedir($dh); }else{ echo "目录错误:{$logDir}"; } }
|
使用SHELL脚本删除日志文件
使用 find
命令,查找日志目录下的名字格式为 "*.log"
,最后修改时间为20天以前的文件,把找到的文件删除掉。
把命令写入 delLogs.sh
文件,通过终端命令sh delLogs.sh
执行。
1 2 3 4
| #!/bin/bash echo start delete log 20 days ago... find /app/Logs/ -mtime +20 -name "*.log" -exec rm -rf {} \; echo end delete log...
|