この記事では、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を使用するセット、条件、およびバインド値がわかり、トラブルシューティングに便利です。