2015-09-16 19 views
2

我爱Yii2日志系统,但我想“窄”了一下日志,避免查询的记录像Yii2:是否有可能过滤出一些查询记录到Yii调试器?

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); 
    } 
} 

然后配置我的应用程序使用它

'log'  => [ 

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

但我想避免这些消息在Yii的调试器的数据库面板中找到。或者,更好地,至完全删除这些SQL的日志记录。 (可能需要扩展活动的查询基类)

对Yii2代码进行更多查找时,我发现所有SQL都被记录在哪里:它位于函数queryInternal中的文件vendor\yiisoft\yii2\db\Command.php中。我在想,我应该重写这个类来覆盖此功能,并覆盖ActiveQueryActiveRecord类迫使这些用我重写Command类...

回答

1

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

也有Yii的调试器我想这是你指的是什么。我不确定如何定制,但你可以看看:cache site

+0

如果我扩展'FileTarget',当然_在日志文件_我放弃的消息不会被记录。我现在尝试创建一个自定义面板来过滤掉无用的查询消息。 – realtebo

相关问题