Laravel 数据库报错

Laravel error reporting in database

我正在向 URL 请求使用 Goutte 获取数据。但是我提出请求的服务器很慢。所以有时 laravel 会抛出超时错误。当出现此错误时,我必须使用一些附加数据(即 ID 等)在数据库中输入此错误日志。我在互联网上搜索过。但是我找到了与自定义错误消息等相关的所有解决方案。我想要的是当 laravel 抛出超时错误时,我必须在数据库中输入额外的数据,然后重定向页面。如果有人知道解决方案,将不胜感激。

这是我的代码。

use Goutte\Client;
class WebScrapingController extends Controller {
    public function index() {
        try {
            $this->crawler = $this->client->request('GET', $url . '?' . $data);
        }catch(Exception $e){
            // Here I want to make entry in database and then redirect to another page
            dd(['Connection time out', $i, $e]);
        }
    }
}

这是我的错误信息

ConnectException in CurlFactory.php line 186:
cURL error 7: Failed to connect to myurl port 80: Connection timed out (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

有时也会出现此错误

RequestException in CurlFactory.php line 187:
cURL error 56: Recv failure: Connection timed out (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

我正在使用 laravel 5.3 和 this 抓取工具。

好吧,我会这样做:

use Goutte\Client;
class WebScrapingController extends Controller {
    public function index() {
        try {
            $this->crawler = $this->client->request('GET', $url . '?' . $data);
        } catch(\ConnectException $e){
            $log = new Log();//define this as a model
            $log->setMessage($e->getMessage());
            $log->save();
        } catch(\RequestException $e){
            $log = new Log();//define this as a model
            $log->setMessage($e->getMessage());
            $log->save();
        } finally {
          $yourModel = YourNamespace\YourModel::find($url);//or, depends on your model structure and DB
          $yourModel = YourNamespace\YourModel::where('url',$url)->first();
        }
    }
}

你也可以把日志的saving移动到一个私有方法中,我把它留成这样你可以看到可以区别对待几个异常,或者你可以作为一般异常捕获:

    public function index() {
        try {
            $this->crawler = $this->client->request('GET', $url . '?' . $data);
        } catch(\Exception $e){
            $log = new Log();//define this as a model
            $log->setMessage($e->getMessage());
            $log->save();
        } finally {
          $yourModel = YourNamespace\YourModel::find($url);//or, depends on your model structure and DB
          $yourModel = YourNamespace\YourModel::where('url',$url)->first();
        }
    }

如果你想登录一些文件,你有 Log 门面:use Illuminate\Support\Facades\Log;