You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:27:00