thinkphp\library\think\db\Connection.php
line: 682
public function query($sql, $bind = [], $master = false, $pdo = false)
{
try {
...
}catch (\PDOException $e) {
if ($this->isBreak($e)) {
return $this->close()->query($sql, $bind, $master, $pdo);
}
var_dump( $e->getMessage() .' [SQL语句]'.$sql );
\Xlog\XLogKit::logger("_sql")->error($e->getMessage() .' [SQL语句]'.$sql);
throw new PDOException($e, $this->config, $this->getLastsql());
}
}
debug日志
protected function debug($start, $sql = '', $master = false){ if (!empty($this->config['debug'])) { // SQL性能分析 if ($this->config['sql_explain'] && 0 === stripos(trim($sql), 'select')) { $result = $this->getExplain($sql); } // SQL监听 $this->triggerSql($sql, $runtime, $result, $master); //SQL记录 if (isset($_SERVER["LOG_SQL"]) && $_SERVER["LOG_SQL"] == 1) { \Xlog\XLogKit::logger("_sql")->info( $sql.' [ RunTime:'.$runtime.'s ]'); } } }
错误日志
thinkphp\library\think\exception\Handle.php
line:84
public function render(Exception $e) { if ($this->render && $this->render instanceof \Closure) { $result = call_user_func_array($this->render, [$e]); if ($result) { return $result; } } if ($e instanceof HttpException) { //写log \Xlog\XLogKit::logger("_sys")->error('[errmsg]'.$e->getMessage() .', [line]' . $e->getLine() .',[file]' . $e->getFile()); return $this->renderHttpException($e); } else { //写log \Xlog\XLogKit::logger("_sys")->error('[errmsg]'.$e->getMessage() .', [line]' . $e->getLine() .',[file]' . $e->getFile()); return $this->convertExceptionToResponse($e); } }
接管日志debug ( 开启数据库的调试模式 )
public function sqlListen(){ Db::listen(function ($sql, $time, $explain, $master) { // 记录SQL echo $sql . ' [' . $time . 's] ' . ($master ? 'master' : 'slave') .'<br/>'; // 查看性能分析结果 //dump($explain); }); }
异常
// 自定义异常页面的模板文件 'exception_tmpl' => Env::get('app_path') . 'template/exception.tpl',
接管异常
// 异常处理handle类 留空使用 \think\exception\Handle 'exception_handle' => '\\app\\common\\exception\\Http',
需要继承 think\exception\Handle 且实现 render 方法
<?php namespace app\common\exception; use Exception; use think\exception\Handle; use think\exception\HttpException; use think\exception\ValidateException; class Http extends Handle { public function render(Exception $e) { // 参数验证错误 if ($e instanceof ValidateException) { return json($e->getError(), 422); } // 请求异常 if ($e instanceof HttpException && request()->isAjax()) { return response($e->getMessage(), $e->getStatusCode()); } // 其他错误交给系统处理 return parent::render($e); } }