3

特に SQL エラーが発生したときに、完全な SQL クエリを error.log に記録できるようにしたいと考えています。私のデバッグは、core.php で 2 に設定されています。

出力は次のように表示されます。

2013-01-29 19:53:21 Error: SQLSTATE[HY000]: General error: 1364 Field 'street' doesn't have a default value
#0 D:\xampp\htdocs\my_project\lib\Cake\Model\Datasource\DboSource.php(459): PDOStatement->execute(Array)
#1 D:\xampp\htdocs\my_project\lib\Cake\Model\Datasource\DboSource.php(425): DboSource->_execute('INSERT INTO `st...', Array)
#2 D:\xampp\htdocs\my_project\lib\Cake\Model\Datasource\DboSource.php(1007): DboSource->execute('INSERT INTO `st...')

ご覧のとおり、SQL ステートメントは部分的にのみログに記録され、残りは省略記号で切り捨てられています。

これと組み合わせて DebugKit を使用していますが、それでも DebugKit ウィンドウで一度に完全な SQL ログを生成することはできません。

ここで例外をスローし、getTraceAsString() をログに記録しています。

どんな解決策でも大歓迎です。

ありがとうございます
m^e

4

3 に答える 3

0

この質問の回答を使用してみることができます。それが最善の答えではないことはわかっていますが、その特定の質問で、ログ ファイルの完全な SQL を出力するこのプラグインを見つけることができます。

于 2013-03-11T03:19:27.080 に答える
0

私は次のことをしました(Cake 2.5.6)

  1. でカスタム エラー ハンドラを作成する

/app/Lib/Error/ErrorHandlerWithSqlLog.php

App::uses('ErrorHandler', 'Error');
class ErrorHandlerWithSqlLog{
    public static function handleException(Exception $exception) {
        if ($exception instanceof PDOException && !empty($exception->queryString)) {            
            CakeLog::write(LOG_ERR, "SQL query: ".$exception->queryString);
        }        
        ErrorHandler::handleException($exception);      
    }
}

それをブートストラップに追加します。

require_once(APP . 'Lib' . DS . 'Error' . DS . 'ErrorHandlerWithSqlLog.php');

そして、core.php のデフォルトの例外ハンドラーをカスタムのものに変更します。

Configure::write('Exception', array(
    //'handler' => 'ErrorHandler::handleException',
    'handler' => 'ErrorHandlerWithSqlLog::handleException',
    'renderer' => 'ExceptionRenderer',
    'log' => true
));
于 2015-05-15T11:26:28.217 に答える