Yii2:是不是可以从登录 Yii 调试器中过滤掉一些查询?
Posted
技术标签:
【中文标题】Yii2:是不是可以从登录 Yii 调试器中过滤掉一些查询?【英文标题】:Yii2: is it possible to filter out some query from being logged into Yii Debugger?Yii2:是否可以从登录 Yii 调试器中过滤掉一些查询? 【发布时间】:2015-09-16 08:05:16 【问题描述】:我喜欢 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);
然后配置我的应用程序以使用它
'log' => [
'targets' => [
....
[
'class' => 'common\components\CustomFileTarget',
'categories' => ['*'],
],
],
但我想避免在 Yii 调试器的数据库面板中找到这些消息。或者,更好的是,完全删除这些 SQL 的日志记录。 (可能这需要扩展主动查询基类)
对 Yii2 代码进行更多查找后,我发现了所有 SQL 的记录位置:它位于函数 queryInternal
中的文件 vendor\yiisoft\yii2\db\Command.php
中。我在想我应该重写这个类来重写这个函数,并重写ActiveQuery
和ActiveRecord
类来强制这些使用我重写的Command
类......
【问题讨论】:
【参考方案1】:对我来说,我发现在 config/web.php 中设置了 log
组件,您可以扩展 yii\log\FileTarget
以自定义正在记录的内容。
还有 Yii 调试器,我认为这就是您所指的。我不确定如何自定义,但你可以看看:cache site
【讨论】:
如果我扩展FileTarget
,当然到日志文件我丢弃的消息不会被记录。我现在将尝试创建一个自定义面板来过滤掉无用的查询消息。以上是关于Yii2:是不是可以从登录 Yii 调试器中过滤掉一些查询?的主要内容,如果未能解决你的问题,请参考以下文章