yii2和laravel 使用mongdb打印执行的语句日志

本文分享一下在Yii框架和laravel框架下查看当前页面执行的mongodb语句的日志记录方法,主要是通过配置相关文件来达到调试sql的目的,具体方法如下:

在yii框架中,在config/public.php文件中,引入mongo:

 

 代码如下:

'mongodb' => array(
    'class' => 'SammayeClient',
    'uri' => 'mongodb://192.168.8.88:27017',
    'options' => [],
    'driverOptions' => [],
    'enableProfiling' => true,
    'db' => [
        'huazai' => [
            'writeConcern' => new \MongoDB\Driver\WriteConcern(1),
            'readPreference' => new \MongoDB\Driver\ReadPreference(\MongoDB\Driver\ReadPreference::RP_PRIMARY),
            'active' => true
        ]
    ],
),

一定要设置 enableProfiling 为 true。

接着在日志里面开启mongodb的日志:

代码如下: 

'log' => array(
    'class' => 'CLogRouter',
    'routes' => array(
        array(
            'class'=>'CFileLogRoute',//用于处理日志的类
            'levels'=>'trace, info, profile, error, warning',//标识那些级别的日志可被记录
            'filter'=>'CLogFilter', //日志过滤类
        ),

        array(
            'class' => 'CWebLogRoute',
            'levels' => 'error, warning',
            'categories' => 'system.db.*,yii\mongodb\*',
            'filter' => 'CLogFilter',
            'showInFireBug' => true, //将在firebug中显示日志
        ),
    ),
),

接着我们执行mongodb查询:

执行查询可以看到使用的mongodb是那个集合,以及查询的条件绑定的值,方便直观的查找问题。

本例中使用OmsAttachMg集合来查询,条件入图中所示:

以上介绍的是yii里面的mongodb查询打印查询条件日志。

下面来介绍laravel里面mongodb查询打印查询条件日志:

在App\Providers目录下面,找到AppServiceProvider.php文件

在boot()方法里面添加如下代码:

ini_set('memory_limit', '512M');

$local = config('app.locale');
app('translator')->setLocale($local);
Carbon::setLocale($local);

Carbon::serializeUsing(function (Carbon $timestamp) {
    return $timestamp->format('Y-m-d H:i:s');
});

DB::listen(function($query) {
    foreach ($query->bindings as $i => $binding) {
        if ($binding instanceof \DateTime) {
            $query->bindings[$i] = $binding->format('Y-m-d H:i:s');
        } else {
            if (is_string($binding)) {
                $query->bindings[$i] = "'$binding'";
            }
        }
    }
    $tmp = str_replace(array('%', '?'), array('%%', '%s'), $query->sql);
    $tmp = vsprintf($tmp, $query->bindings);
    $tmp = str_replace("\\","",$tmp);
    Log::info($tmp."\n\n\t");

});

接着我们来看一下查询:

 或者我们直接打印:

代码如下:

DB::connection('mongodb')->enableQueryLog();

$file =  DB::connection('mongodb')->collection('file')
        ->where(function($query) use ($data) {
            if(!empty($data['filekey'])) {
                $query->where('filekey', '=', trim($data['filekey']));
            }
        })
        ->first();

echo "<pre>";
print_r(DB::connection('mongodb')->getQueryLog());

这样可以看到如下mongodb如下的执行日志:

这个就告诉我们使用mongo哪个集合什么条件以及绑定的值,方便排查问题。 

猜你喜欢

转载自blog.csdn.net/lchmyhua88/article/details/111642745