简单两步就能将 Laravel Log 信息发到其他平台上

本文字数:3580.5,大概需要7.16分钟。

我们在写代码时,都想自己的代码尽可能的不影响现有的代码。

或者说,最大化不改动任何代码的情况下,如何嵌入我们的新功能?这是我们常说的「非侵入式」的开发方式。

使用「非侵入式」的开发模式,主要在提供第三方插件和功能中最为常见。今天借助「Rollbar」第三方工具来说说如何做到「非侵入式」开发。

本文主要能学到:

Laravel Event / Listener 原理;

Rollbar for Laravel 的使用

创建一个 Log to Dingding 群的功能

Laravel Event / Listener 原理

在 Laravel,主要利用来加载:

返回的是对象。我们看看类:

主要作用是绑定和,当触发时,直接执行。

我们希望 log 除了在本地文件存储输出外,也想把 log 信息实时发到其他平台和渠道上,这时候我们就需要借助的绑定实现了。现在来看看:

这里将也就是传入,用户事件的注册:

有了和就可以做到「非入侵」开发了。

Rollbar

Rollbar error monitoring integration for Laravel projects. This library adds a listener to Laravel's logging component. Laravel's session information will be sent in to Rollbar, as well as some other helpful information such as 'environment', 'server', and 'session'.

参考:https://docs.rollbar.com/docs/laravel

简单使用

使用该工具,只要在其官网注册账号,并产生一个即可

安装该工具,也只需要简单的两步:

测试,只要有 Log 输出,rollbar 后台都可以收到信息,方便查看,而再也不需要去看 log 文件了。

剖析实现原理

我们来看看 rollbar 是不是我们所设想的那样实现的?

我们先看看

这个比较好理解,先利用注册两个,然后在方法中,注册

其中,就是我们的上文说的,将注册到中。

最后我们看看facades 返回的是:对象

看看实现,也主要是将 log 信息反馈到Rollbar 中,此处不做分析了。

模拟实现

通过对简单的分析,就会发现原来通过简单,不用改现在的任何功能和代码,就能实现将 log 实时发到你想接收的地方。

所以我们可以尝试也写一个这样的功能,将 log 信息发到钉钉上。

好了,我们开始写插件。

根据之前的文章我们可以很方便的组织好插件结构:

设置:

我们定义:

我们主要是创建一个发钉钉消息的单例,然后再注册,只要获取 log 信息,就发送信息到钉钉上。

测试一下:

总结

最后做成插件,和一样,引入:

同样的,其他信息都不需要设置,跑一个测试:

Laravel 框架的一大好处在于,可以以友好的方式实现我们「非入侵」开发,只要借助「」和「」,就可以扩展我们的功能。

参考

coding01 期待您继续关注

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180513G12R4L00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券