Php Yii2:是否可以从登录到Yii调试器中筛选出一些查询?

Php Yii2:是否可以从登录到Yii调试器中筛选出一些查询?,php,yii2,Php,Yii2,我喜欢Yii2日志系统,但我想“缩小”一点日志,避免像这样记录查询 SHOW CREATE TABLE `tbl_product` 或与RBAC相关的 SELECT * FROM `tbl_auth_assignment` WHERE `user_id`='1' 我可以在何处以及如何自定义/配置日志系统,以通过sql文本排除查询(而不是通常通过日志类别/级别) 我知道我可以扩展FileTarget以避免将某些消息写入磁盘。例如: <?php namespace common\comp

我喜欢Yii2日志系统,但我想“缩小”一点日志,避免像这样记录查询

SHOW CREATE TABLE `tbl_product`
或与RBAC相关的

SELECT * FROM `tbl_auth_assignment` WHERE `user_id`='1'
我可以在何处以及如何自定义/配置日志系统,以通过sql文本排除查询(而不是通常通过日志类别/级别)

我知道我可以扩展FileTarget以避免将某些消息写入磁盘。例如:

<?php

namespace common\components;

class CustomFileTarget extends \yii\log\FileTarget
{   
    // this is an override
    public function collect($messages, $final)
    {

        foreach ($messages as $index  => $message) {
            // See http://www.yiiframework.com/doc-2.0/yii-log-logger.html#$messages-detail
            if ($message[2] == 'yii\\db\\Command::query') {

                $is_full_cols       = (stripos($message[0], "SHOW FULL COLUMNS")===0);
                $is_create_table    = (stripos($message[0], "SHOW CREATE TABLE")===0);

                if ($is_full_cols OR $is_create_table)  {
                    unset($messages[$index]);
                }
            } 


        }
        parent::collect($messages, $final);
    }
}
但我希望避免在Yii调试器的数据库面板中找到这些消息。或者,最好是完全删除这些SQL的日志记录。(这可能需要扩展活动查询基类)


通过进一步查找Yii2代码,我找到了所有sql的记录位置:它位于函数
queryInternal
中的文件
vendor\yiisoft\Yii2\db\Command.php
。我想我应该重写这个类来重写这个函数,重写
ActiveQuery
ActiveRecord
类来强制它们使用我重写的
命令

对于我来说,我发现config/web.php中有
log
组件集,您可以扩展
yii\log\FileTarget
来定制正在记录的内容


还有一个Yii调试器,我想这就是您所指的。我不确定如何定制,但您可以看看:

如果我扩展
FileTarget
,当然不会将我丢弃的消息记录到日志文件中。我现在将尝试创建一个自定义面板来过滤无用的查询消息。
'log'       => [

        'targets'   => [
            ....
            [
                'class'         => 'common\components\CustomFileTarget',
                'categories'    => ['*'],
            ],
        ],