本文最早发表于本人博客: 制作一个BearyChat的Laravel项目错误日志通知机器人

Laravel 集成 Monolog 来做日志处理,Monolog非常强大,也容易扩展,其实它本身已经支持很多Handler了,你可以把日志发送到邮件或者其他日志收集服务器或者系统中,因为我们团队使用Bearychat 作为团队沟通工具,所以把Laravel项目的实时错误日志推送到Bearychat的一个讨论组中,方便组员迅速发现异常和解决问题 ,其实很简单没多少行代码就搞定了。

  • 首先创建BearyChatHandler
<?php
namespace App;use Monolog\Handler\AbstractProcessingHandler;
use Monolog\Logger;
use Monolog\Handler\Curl;class BearyChatHandler extends AbstractProcessingHandler
{private $data;private $webhook;public function __construct($webhook, $channel, $level = Logger::NOTICE, $bubble = true){$this->data['channel'] = $channel;$this->webhook = $webhook;parent::__construct($level, $bubble);}/*** {@inheritDoc}*/protected function write(array $record){$postData = ['text' => $record['datetime']->format('Y-m-d H:i:s') . '-' . $record["level"] . '-' . $record["level_name"],'markdown' => false,'notification' => 'Laravel Error Log','attachments' => [['title' => current(preg_split("/([.\n\r]+)/i", $record['message'])),'text' => $record['message'],'color' => '#ffa500']]];$postString = json_encode(array_merge($this->data, $postData));$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $this->webhook);curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));Curl\Util::execute($ch);}}

只要继承AbstractProcessingHandler,重写write方法就可以了,write中向Bearychat的webhook地址POST数据就可以了,$recordMonolog记录日志的详情

  • 创建一个BearyChat组用来接受通知

    • 新建讨论组,比如叫"Laravel错误日志报告"
    • 添加机器人到讨论组,点击Incoming添加一个比如叫"Laravel日志机器人",发送目标选择上一步建的"Laravel错误日志报告",这样就获取了webhook的URL地址了
    • 把相应的人员加到这个讨论组
  • 集成ChearyChatHandler

官方手册上讲到,你像这样完全控制Monolog

Custom Monolog Configuration

If you would like to have complete control over how Monolog is configured for your application, you may use the application's configureMonologUsing method. You should place a call to this method in your bootstrap/app.php file right before the $app variable is returned by the file:

$app->configureMonologUsing(function($monolog) {
$monolog->pushHandler(...);
});

return $app;

但是我们除了发送到ChearyChat以外还要保留默认的记录到log文件的方式,所以我们不这样做,我们只要在 Exception Handler的地方添加一个我们的ChearyChatHandler就可以了。

修改app/Exceptions/Handler.php,在report方法中添加如下代码就可以了:

<?phpnamespace App\Exceptions;use App\BearyChatHandler;
......
use Log;class Handler extends ExceptionHandler
{......public function report(Exception $e){$monolog = Log::getMonolog();$monolog->pushHandler(new BearyChatHandler('https://yourhookurl','Laravel日志机器人'));return parent::report($e);}
......
}

好了,在代码中故意写个错误,看看BearyChat收到错误日志了。

如果觉得本篇文章对您十分有益,何不 打赏一下

制作一个BearyChat的Laravel项目错误日志通知机器人相关推荐

  1. 动漫风html源码,CSS3动画制作一个卡通风格的404错误页面代码

    CSS3动画制作一个卡通风格的404错误页面代码(有动画效果) html> Css 404错误页 .error-container { text-align: center; font-size ...

  2. 项目错误日志之Error running ‘DictDAOTest.testCount‘: Failed to resolve org.junit.platform:junit-platf

    错误积累 环境及工具 1.idea2018软件工具 2.springBoot开发环境 问题日志: 今天想看看spring得mapper底层代理得实现结果测试报错具体如下. 报错如下 这是报的错误 看了 ...

  3. 怎么查看tomcat服务器项目错误日志,tomcat 启动报错日志查看

    控制台打印的信息,最后几句话.提示可以去看tomcat的log Connected to server [2020-08-04 11:19:10,680] Artifact h5demo:Web ex ...

  4. PHPCMS 错误日志 Only variables should be passed by ...

    有几个网站是PHPCMS V9做的,但这两天发现一个问题,PHPCMS 的错误日志超过了20M ,后台报警,然后我看了下错误日志,其中两万多行都是一个错误,错误信息如下: 1 <?php exi ...

  5. mysql dml 日志_Oracle DML错误日志笔记

    DML错误日志是Oracle 10gR2引入的一个类似于SQL*Loader的错误日志功能.它的基本原理是把任何可能导致语句失败的记录转移,放到一 DML错误日志是Oracle 10gR2引入的一个类 ...

  6. oracle DML错误日志(笔记)

    DML错误日志是oracle10gR2引入的一个类似于SQL*Loader的错误日志功能.它的基本原理是把任何可能导致语句失败的记录转移,放到一张错误日志表中. 具体使用如下: 1.使用DBMS_ER ...

  7. MySQL 运维 日志 -- 错误日志、二进制日志、查询日志、慢查询日志

    文章目录 1. 错误日志 2. 二进制日志 2.1 介绍 2.2 格式 2.3 查看 2.4 删除 3. 查询日志 4. 慢查询日志(可以记录用时较长的SQL) 4.1 开启慢查询日志 4.2 慢查询 ...

  8. 小米应用商店错误日志查看教程(含工具下载)

    序言 在小米商店上架过程中,如果发生错误.可以下载日志,但是日志文件需要特殊工具查看.而且官网上也没有相应的教程.特别记录一下. 下载下来以后解压出来是这样的. mp4里面是测试视频.而压缩包里面是日 ...

  9. ELK实时分析之php的laravel项目日志

    最近因公司项目增多,且环境也越来复杂,开发人员找我查看错误日志越来越频繁,心里便念想到ELK,心之所想,念之所达,快来get一项新技能吧 1.系统架构组成 laravel日志:日志源通过filebea ...

最新文章

  1. 历时5天,刷了100+个裂变活动后…
  2. Python地信专题 | 基于geopandas玩转地图可视化
  3. c语言基础回顾 —— 其他知识点
  4. L3-2 至多删三个字符
  5. 怎么样解决小交换机引起的路由环路故障?
  6. 中缀表达式转换为前缀或后缀表达式的手工做法
  7. 如何使用cURL一次测量请求和响应时间?
  8. 性能优化篇 - Performance(工具 api)
  9. myeclipse使用步骤总结
  10. android 产品上线流程图,产品上线工作流程(试行)20050302.doc
  11. 百度内容审查做敏感词库筛选
  12. 图书速读 | 一分钟读完《如何成为学习高手》
  13. IT基础知识(精华版一)
  14. 车牌识别项目(3)sobel算法边缘检测
  15. PHP - 使用file_get_contents下载远程文件到本地
  16. 天宝数字水准数据处理和生成
  17. 群晖NAS搭建web服务器,并发布公网可访问 2/4
  18. 景观格局指数计算方法及代表的生态学意义(待补充)
  19. HJY-F931A/YJ三相电压继电器
  20. probability是什么意思_probability是什么意思_probability怎么读_probability翻译_用法_发音_词组_同反义词_可能性-新东方在线英语词典...

热门文章

  1. 初识EPANET 2(供水管网水里模型)
  2. Git使用 从入门到入土 收藏吃灰系列(四) Git工作原理
  3. 含有外部电路设置的电磁炮Maxwell瞬态仿真
  4. 物联网mqtt前端怎么开发_物联网世界中的前端开发
  5. python拼写_Python拼写游戏
  6. python拼写_用 Python 27 行实现拼写纠正
  7. 解决wget报错ERROR: The certificate of ‘xxxxx’ is not trusted
  8. git not found
  9. 速卖通平台关于欧洲EPR详细规则解析
  10. 4.2 linux文件系统-高速缓冲区