![748308b5e1043bb4f942104b36941c8b.png](https://i-blog.csdnimg.cn/blog_migrate/a040b164e578a1fe9e64d72ec041a001.jpeg)
前面6章的工作已经能让整个系统能支持静态网站开发了,在做动态站点之前我又做了邮件和日志的功能研发,方便在整个开发过程中能够很好的做到错误分析和定位。
我其实是最后才写的邮件和日志的实现方法,前面都是在为框架铺路,发现最后得到的产物和工作中用到的工具长得很像。
来看一下做邮件和日志功能集成我提交和改动的代码:
![3c671d846e44c16d9607b22dcd73a8e2.png](https://i-blog.csdnimg.cn/blog_migrate/6b1f9de8a7b2f32b70d532928215464d.jpeg)
十来个类和一个配置文件,此外还附带一很多小的功能开发是随着版本迭代一起做的。比如说错误页面以及配置文件的升级。你可能观看一下我的配置文件就能知道我做的东西还是麻雀虽小五脏俱全的,看下图:
![55dd93613dbbaca479f9c0a0929904cd.png](https://i-blog.csdnimg.cn/blog_migrate/d7a63b1361cbe183441d1a278c0c3fca.jpeg)
在我的日志处理里面是不支持记录请求日志的,因为这完全可以交由负载均衡服务器或者网关服务或者第三方日志插件来记录,没必要在我的轻量级框架里面做这种很重的事情,日志我只记录真正我关心的部分。而至于邮件部分则是配置好发送方和异常接收方就可以用了,基本也就是把异常栈拉出来发邮件给收件方的思路。
![198b5788149731a86554c57594386fad.png](https://i-blog.csdnimg.cn/blog_migrate/1d783006d541d12c23b6d3fec8ece400.jpeg)
上图中对写邮件的过程封装成了队列操作,然后在添加的时候触发消费者的生成,消费完了消费者也消失,没测过高并发情况,应该能满足绝大部分场景了。单个异步线程作为消费者持续消费由生产者并发生成的日志,基本满足文件的串行写入,不会造成并发写和日志顺序错乱的问题。
同样邮件发送也是一样用到了队列,只不过邮件发送需要单独做一些方法封装才能完成邮件的正常发送,截图体会下意思:
![719a1f03ecefd6fba80760d0b23a246a.png](https://i-blog.csdnimg.cn/blog_migrate/95ee65f3148e4840d0f5c5a47e6be6e8.jpeg)
除了时间需要在异步线程外获取并写入操作对象,其它没啥注意点的。也就是说邮件发送和日志写入的方法就算开发完了。接下来是托管所有异常处理中的异常邮件发送和日志写入。
前面的章节介绍了我已经把所有操作在过滤器里用try{}catch(){}操作捕获异常并统一处理了。来看一下所有异常处理的思路:
![3289b9dc4404caab99e61fcfb9ba2ed0.png](https://i-blog.csdnimg.cn/blog_migrate/4439b4d0a6ce2e3fe9f88f2d183a5cbc.jpeg)
思路很清晰分别处理业务异常,系统异常和系统错误三种情况,然后再来看截图:
![e6287b74bcd7a45db95529035346cc1e.png](https://i-blog.csdnimg.cn/blog_migrate/ef5a1c51ae1d72fda011282eca31c2bf.jpeg)
其实只有业务异常处理稍微特殊一点,其它的异常处理方式都一样。也就是在这里引入了异常页面,于是就顺便把异常页面都补上去做了。然后再每个方法里面调用了邮件发送和日志写入,整个过程就串起来了,最后再在发邮件里面复用写日志。唯独在写日志的地方捕获的异常不能在进行异常处理了,防止循环递归。
最后来看一下效果吧,我发送了一个异常到自己的QQ邮箱,然后本地日志也写了,整个效果还是不错的。
![915693a0f30ef767cf607a16f1f99e24.png](https://i-blog.csdnimg.cn/blog_migrate/41ba52f47eb22a5d4df3c8bbe9dad698.jpeg)
![d87f490055b71989de7f4ebe3e25d83a.png](https://i-blog.csdnimg.cn/blog_migrate/6738f55feefec29c3575725adc87c4a1.jpeg)
邮件和日志写的代码量还是挺多的,而且这是我之前实践没完成的遗留问题,今天是新开发的,心情真是不错,再接再厉,下一章准备开发http请求服务。