swoole协程在laravel中无法输出报错信息
如题,开发环境
ubuntu 16.0.4 lts
php 7.1.7
swoole 4.2.13
laravel 5.6.29
php.ini与laravel的诊断开关均已打开,
直接在cli中php a.php运行没有问题,但是在laravel中php artisan scanner,程序会直接退出且不产生任何报错,没有生成日志也没有打印消息,就没了……
示例:
<?php namespace App\Console\Commands;
use Illuminate\Console\Command;
use Swlib\SaberGM;
class ScanCli extends Command {
protected $signature = 'scanner';
protected $description = '扫描';
public function __construct() {
parent::__construct();
}
public function handle() {
try {
go(function () {
echo "1\n";
$str = json_decode('{"a":123}');
try {
echo "2\n";
echo $str['a'] . "\n";//Cannot use object of type stdClass as array
echo "3\n";
} catch (\Exception $exception) {
echo $exception->getTraceAsString() . "\n";
}
echo "4\n";
return;
});
} catch (\Exception $exception) {
echo $exception->getTraceAsString() . "\n";
}
return true;
}
}
vendor里也做过没什么额外的调整,就几个东西
"require": {
"php": "^7.1.3",
"elasticsearch/elasticsearch": "^6.1",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.6.*",
"laravel/tinker": "^1.0",
"predis/predis": "^1.1",
"swlib/saber": "^1.0"
},
"require-dev": {
"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^2.0",
"phpunit/phpunit": "^7.0"
},
不使用协程直接扔exception是可以报错的,不使用laravel也是可以正常报错的,但是这俩合一起……出了错就闷声发财去了……
如上面代码的示例……命令行只会输出到2,之后就退出了,没有任何剩余步骤,感觉就像出错直接exit了……实在是不理解到底发生了什么……
看起来可能是laravel干掉了报错信息,之后又因为某些问题导致laravel输出报错的部分出现了bug……
又或者是因为协程的存在导致了laravel的ExceptionHandler不再可用,而且也没有恢复正常的报错格式……
想问一下有没有哪位遇到过同样的问题?实在不行只能弃掉laravel单独用了……
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你try catch代码呢?可能是你没捕获到
laravel的ExceptionHandler好像是个页面。。好久没用了
试一下使用swoole的退出协程捕获https://wiki.swoole.com/wiki/...