Php Yii2:是否可以从登录到Yii调试器中筛选出一些查询?
我喜欢Yii2日志系统,但我想“缩小”一点日志,避免像这样记录查询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
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' => ['*'],
],
],