编程学习网 > PHP技术 > Yii2 > Yii2 自带的日志组件扩展
2015
12-24

Yii2 自带的日志组件扩展

<?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,
            ],
        ],
    ],
],

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取