扩展 Yii2 自带的日志组件

PHP piniu 747浏览 0评论

首先自定义一个日志类,继承\yii\log\FileTarget

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

不需要调parent::init();  或者直接继承Target ,因为已经继承了 \yii\log\FileTarget


发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • * 昵称:
  • * 邮箱: