九:引入第三方日志库、go语言风格的defer 使用
为了方便演示 今天的功能,我们引入一个第三方日志库:monolog
链接网址:https://github.com/Seldaek/monolog
这是一个目前在PHP中比较流行的日志库,可以非常方便把日志写入到控制台,文件,redis,elasticsearch等
一:安装:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

执行结果:

二:手动将下载的文件上传到服务器
三:代码实现
<?php
require_once "vendor/autoload.php";
use App\sync\WaitGroup;
use Swoole\Coroutine as co;
function query(array $sqls)
{
$mysql = new co\MySQL();
$conn = $mysql->connect(['host' => '192.168.1.139', 'user' => 'root', 'password' => 'SwoftTest@1234', 'database' => 'swoft2',]);
foreach ($sqls as $sql) {
$statement = $mysql->prepare($sql);
if ($statement == false) {
var_dump($mysql->errno, $mysql->error);
}
$rows = $statement->execute();
foreach ($rows as $row) {
foreach ($row as $k => $v) {
echo $k . "=>" . $v . ";";
}
}
}
echo PHP_EOL;
}
go(function () {
$wg = new WaitGroup();
$wg->Add(2);//设置协程的数量
$logger=new Monolog\Logger("mylog");
//var_dump($logger);
go(function () use ($wg,$logger) {
query(["select sleep(3)", "select * from user where user_id=1"]);
defer(function ()use ($wg,$logger)
{
$logger->info("延迟执行",["userid"=>1,"sleep"=>3]);
$wg->Done();
});
throw new Exception("未拦截异常");
});
go(function () use ($wg,$logger) {
query(["select * from user where user_id=2"]);
$logger->info("延迟执行",["userid"=>1,"sleep"=>2]);
$wg->Done();
});
$wg->Wait();
echo "done" . PHP_EOL;
});

浙公网安备 33010602011771号