扩展 Yii2 自带的日志组件

技巧库 · forecho · 于 1年前 发布 · 2123 次阅读
<?php

/**
 * author     : forecho <caizhenghai@gmail.com>
 * createTime : 2015/12/22 18:13
 * description:
 */
namespace common\components;

use Yii;
use yii\helpers\FileHelper;

class FileTarget extends \yii\log\FileTarget
{
    /**
     * @var bool 是否启用日志前缀 (@app/runtime/logs/error/20151223_app.log)
     */
    public $enableDatePrefix = false;

    /**
     * @var bool 启用日志等级目录
     */
    public $enableCategoryDir = false;

    private $_logFilePath = '';

    public function init()
    {
        if ($this->logFile === null) {
            $this->logFile = Yii::$app->getRuntimePath() . '/logs/app.log';
        } else {
            $this->logFile = Yii::getAlias($this->logFile);
        }
        $this->_logFilePath = dirname($this->logFile);

        // 启用日志前缀
        if ($this->enableDatePrefix) {
            $filename = basename($this->logFile);
            $this->logFile = $this->_logFilePath . '/' . date('Ymd') . '_' . $filename;
        }

        if (!is_dir($this->_logFilePath)) {
            FileHelper::createDirectory($this->_logFilePath, $this->dirMode, true);
        }

        if ($this->maxLogFiles < 1) {
            $this->maxLogFiles = 1;
        }
        if ($this->maxFileSize < 1) {
            $this->maxFileSize = 1;
        }

    }
}

在配置文件中这样使用:

'components' => [
    'log' => [
        'traceLevel' => YII_DEBUG ? 3 : 0,
        'targets' => [
            /**
             * 错误级别日志:当某些需要立马解决的致命问题发生的时候,调用此方法记录相关信息。
             * 使用方法:Yii::error()
             */
            [
                'class' => 'common\components\FileTarget',
                // 日志等级
                'levels' => ['error'],
                // 被收集记录的额外数据
                'logVars' => ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION','_SERVER'],
                // 指定日志保存的文件名
                'logFile' => '@app/runtime/logs/error/app.log',
                // 是否开启日志 (@app/runtime/logs/error/20151223_app.log)
                'enableDatePrefix' => true,
                'maxFileSize' => 1024 * 1,
                'maxLogFiles' => 100,
            ],
            /**
             * 警告级别日志:当某些期望之外的事情发生的时候,使用该方法。
             * 使用方法:Yii::warning()
             */
            [
                'class' => 'common\components\FileTarget',
                // 日志等级
                'levels' => ['warning'],
                // 被收集记录的额外数据
                'logVars' => ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION','_SERVER'],
                // 指定日志保存的文件名
                'logFile' => '@app/runtime/logs/warning/app.log',
                // 是否开启日志 (@app/runtime/logs/warning/20151223_app.log)
                'enableDatePrefix' => true,
                'maxFileSize' => 1024 * 1,
                'maxLogFiles' => 100,
            ],
            /**
             * info 级别日志:在某些位置记录一些比较有用的信息的时候使用。
             * 使用方法:Yii::info()
             */
            [
                'class' => 'common\components\FileTarget',
                // 日志等级
                'levels' => ['info'],
                // 被收集记录的额外数据
                'logVars' => ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION','_SERVER'],
                // 指定日志保存的文件名
                'logFile' => '@app/runtime/logs/info/app.log',
                // 是否开启日志 (@app/runtime/logs/info/20151223_app.log)
                'enableDatePrefix' => true,
                'maxFileSize' => 1024 * 1,
                'maxLogFiles' => 100,
            ],
            /**
             * trace 级别日志:记录关于某段代码运行的相关消息。主要是用于开发环境。
             * 使用方法:Yii::trace()
             */
            [
                'class' => 'common\components\FileTarget',
                // 日志等级
                'levels' => ['trace'],
                // 被收集记录的额外数据
                'logVars' => ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION','_SERVER'],
                // 指定日志保存的文件名
                'logFile' => '@app/runtime/logs/trace/app.log',
                // 是否开启日志 (@app/runtime/logs/trace/20151223_app.log)
                'enableDatePrefix' => true,
                'maxFileSize' => 1024 * 1,
                'maxLogFiles' => 100,
            ],
        ],
    ],
],

代码思路来自 @Simon


如果这篇文章对您有帮助,不妨微信小额赞助我一下,让我有动力继续写出高质量的教程。

共收到 4 条回复 Yii2组件
light#11年前 1 个赞

@Simon

kevin#21年前 0 个赞

确定不需要调parent::init(); 或者直接继承Target

echo#31年前 0 个赞

@kevin #2楼 不需要啊,因为已经继承了 \yii\log\FileTarget

Jacky8#41个月前 0 个赞

请问这个php文件应该放在哪个目录才能使用?

找到了,使用yii advance template,放在common/components目录下面,文件名为FileTarget.php

谢谢!

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册