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
中。我在想,我应该重写这个类来覆盖此功能,并覆盖ActiveQuery
和ActiveRecord
类迫使这些用我重写Command
类...
如果我扩展'FileTarget',当然_在日志文件_我放弃的消息不会被记录。我现在尝试创建一个自定义面板来过滤掉无用的查询消息。 – realtebo