期望监听PHP Fatal error 级别的日志,请问怎么解决?
问题描述
使用的是swoft
php运行时会有error级别错误,会直接打印到屏幕或输出到swoole.log,期望能监听到如果是PHP Fatal error就监听到具体错误信息通过钉钉机器人直接推送消息到钉钉群中
自己尝试过哪些方法
1.在 App::error();主动写入error级别日志时,监听了相关信息
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
base/vendor/swoft/framework/src/App.php
/**
* error级别日志
*
* @param mixed $message 日志信息
* @param array $context 附加信息
*/
public static function error($message, array $context = array())
{
self::dingdingLog($message, $context);
self::getLogger()->error($message, $context);
}
/**
* 发送钉钉消息
* @param mixed $msg 信息
* @param array $context 附加信息
* @param bool $isMe
* @throws \Exception
*/
public static function dingdingLog($msg, array $context = array())
{
$serverIp = swoole_get_local_ip();
$serverIp = empty($serverIp) ? '' : JsonHelper::encode($serverIp);
$content = '### <font color="#dd0000">' . APP_NAME . '</font> Error Log' . PHP_EOL;
$content .= '1. Message:' . $msg . PHP_EOL;
if (!empty($context)) $content .= '2. Context:' . JsonHelper::encode($context) . PHP_EOL;
$content .= '3. Time:' . date('Y-m-d H:i:s') . PHP_EOL;
$content .= '4. Ip:' . $serverIp . PHP_EOL;
$body = [
'msgtype' => 'markdown',
'markdown' => ['title' => 'Log Error', 'text' => $content],
];
$client = new \Swoft\HttpClient\Client();
$client->post(DING_DING_LOG_URL, ['body' => JsonHelper::encode($body), 'headers' => ['Content-Type' => 'application/json;charset=utf-8']]);
return $client;
}
你期待的结果是什么?实际看到的错误信息又是什么?
期望能把php运行的error错误也监听
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Swoft
有异常处理啊,官网文档有说明:https://doc.swoft.org/master/...你捕获到异常以后调用你封装的钉钉方法就可以了吧。
首先我们在
app
目录下创建一个Exception
目录,建立一个异常捕获的处理控制器SwoftExceptionHandler
用到的注解
@ExceptionHandler()
class注解,声明当前类是异常处理类@Handler()
method注解,需要捕获的异常类;例如
Exception::class
为php自带或者自己定义的异常处理类配置能被
Swoft
扫描到在
config/properties/app.php
中的beanScan
中增加App\Exception
, 配置如下修改完成后,重新启动
swoft
即可。