Yii2如何配置实现每日自动删除runtime/logs目录下的日志文件
Yii2 日志自动清理解决方案
方案一:直接修改日志组件配置(推荐)
Yii2 内置的yii\log\FileTarget自带日志轮转和旧文件自动清理能力,修改现有配置即可实现按日生成日志、自动删除过期日志,参考配置如下:
'log' => [ 'traceLevel' => 3, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], // 开启日志轮转 'enableRotation' => true, // Linux环境建议设为false,轮转效率更高 'rotateByCopy' => false, // 设为0表示不按文件大小触发轮转,仅按时间轮转 'maxFileSize' => 0, // 轮转间隔为1天(86400秒) 'rotateInterval' => 86400, // 保留最近N天的日志,超出的自动删除,可根据需求调整数值,比如设为1仅保留1天 'maxLogFiles' => 7, ], ], ],
方案二:自定义控制台命令+定时任务(灵活度更高)
如果需要更自定义的清理规则,可自行实现日志清理控制台命令,配合系统定时任务执行:
1. 新增控制台命令
在项目console/controllers目录下新建LogController.php,代码如下:
<?php namespace console\controllers; use yii\console\Controller; use yii\helpers\FileHelper; class LogController extends Controller { /** * 清理指定天数前的日志文件 * @param int $days 保留日志的天数,默认保留7天 */ public function actionClear($days = 7) { $logDir = \Yii::getAlias('@runtime/logs'); $logFiles = FileHelper::findFiles($logDir, ['only' => ['*.log']]); $expireTimestamp = time() - $days * 86400; foreach ($logFiles as $file) { if (filemtime($file) < $expireTimestamp) { unlink($file); echo "已删除过期日志:{$file}\n"; } } echo "所有过期日志清理完成\n"; } }
2. 配置定时任务
Linux系统可直接配置crontab定时执行命令,示例为每天凌晨1点执行,保留最近7天日志:
0 1 * * * /usr/bin/php /你的项目绝对路径/yii log/clear --days=7 > /dev/null 2>&1
Windows系统可在任务计划程序中添加对应执行计划。
内容的提问来源于stack exchange,提问作者mohamadreza zahmatkesh
相关产品推荐
相关产品推荐

