0
点赞
收藏
分享

微信扫一扫

php后台管理系统laravel7.2以上异常发送钉钉告警提醒

南陵王梁枫 2022-05-19 阅读 52

1,\app\Http\Middleware\目录下新增文件Monitor.php

php后台管理系统laravel7.2以上异常发送钉钉告警提醒_外网php后台管理系统laravel7.2以上异常发送钉钉告警提醒_json_02

<?php

namespace App\Http\Middleware;

use Error;
use Closure;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Contracts\Container\Container;
use Illuminate\Contracts\Debug\ExceptionHandler;
use Psy\Exception\ErrorException;
use Psy\Exception\FatalErrorException;

class Monitor
{
/**
* The App container
*
* @var Container
*/
protected $container;

/**
* The Monitor Client
*
* @var
*/
protected $monitor;

/**
* Create a new middleware instance.
*
* @param Container $container
*/
public function __construct(Container $container)
{
$this->container = $container;
}

/**
* Handle an incoming request.
*
* @param Request $request
* @param Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// dump("monitorDing");
$enabled = config('monitorDing.enabled');
try {
$response = $next($request);
} catch (Exception $e) {
$response = $this->handleException($request, $e);
$enabled && $this->sendText(sprintf("文件:%s (%s 行) 内容:%s", $e->getFile(), $e->getLine(), $e->getMessage()));

} catch (Error $error) {
$e = new FatalErrorException($error);
$response = $this->handleException($request, $e);
$enabled && $this->sendText(sprintf("文件:%s (%s 行) 内容:%s", $e->getFile(), $e->getLine(), $e->getMessage()));
} catch (ErrorException $error) {
$e = new FatalErrorException($error);
$response = $this->handleException($request, $e);
$enabled && $this->sendText(sprintf("文件:%s (%s 行) 内容:%s", $e->getFile(), $e->getLine(), $e->getMessage()));
} finally {
if ($response->getStatusCode() == '500' && (isset($response->exception) && $response->exception && $response->exception !== null)) {
$sysName = config('monitorDing.web_name');

if (strpos($_SERVER['HTTP_HOST'], 'liexin') !== false) {
$sysName = '本地' . $sysName;
} else {
$sysName = '外网' . $sysName;
}

$this->sendText(substr($sysName . ":" . $response->exception, 0,
500) . ',请求数据:' . json_encode($request->input()) . "---[更多详情请看日志]");
}
}
return $response;
}

/**
* Handle the given exception.
*
* (Copy from Illuminate\Routing\Pipeline by Taylor Otwell)
*
* @param $passable
* @param Exception $e
* @return mixed
* @throws Exception
*/
protected function handleException($passable, Exception $e)
{
if (!$this->container->bound(ExceptionHandler::class) || !$passable instanceof Request) {
throw $e;
}

$handler = $this->container->make(ExceptionHandler::class);

$handler->report($e);

return $handler->render($passable, $e);
}


/**
* 发送文本类型的消息
*
* @param $content string 消息内容
* @param array $atMobiles 被@人的手机号
* @param bool $isAtAll 是否 @ 所有人
* @throws SendErrorException
*/
public function sendText($content, $atMobiles = [], $isAtAll = false)
{
$params = [
'msgtype' => 'text',
'text' => [
'content' => $content,
],
'at' => [
'atMobiles' => $atMobiles,
'isAtAll' => $isAtAll
]
];
$this->send($params);
}

/**
* 发送
* @param array $params 请求需要的参数
* @throws SendErrorException
*/
private function send($params = [])
{
if (!config('monitorDing.enabled')) {
\Log::info('~~ Monitor Ding ~~');
\Log::info($params);
} else {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, config("monitorDing.webhook"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=utf-8'));
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if (config()) {
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
}
$data = json_decode(curl_exec($ch), true);
curl_close($ch);

if ($data['errcode']) {
// throw new SendErrorException($data['errmsg']);
}
}

}
}

View Code


2,Kernel.php新增\App\Http\Middleware\Monitor::class

php后台管理系统laravel7.2以上异常发送钉钉告警提醒_外网_03



3,,config文件新增monitorDing.php

<?php
return [
// 是否开启报错写入
'enabled' => true,

// curl证书验证, 线下环境不用开启
'curl_verify' =>"false",

'web_name'=>"钉钉告警关键词",

// webhook的值
'webhook' => "钉钉告警地址",
];

完成


举报

相关推荐

0 条评论