今天上午老司机抽空讲了下之前做的日志管理系统,同期还有一个监控系统,两个团队,开发都是5.6个人,做的时间也不长,这个功能也不是很复杂,主要也是作为一个插件供别人使用的。
我们在写功能时候,一般情况下都是在controller层中捕获异常,并做处理。这样的处理合情合理,但是每一个方法都要try/catch,而且在catch里面基本上都是相同的操作,要么logger.error(),要么throw个exception,对于这些类似的代码,我们想到了做统一处理,基于这个想法,并加以扩展,经理就提出了这个日志的管理系统。
下面是老司机的简单需求:
1、 数据采集: controller增强器 log日志打印信息
2 、数据放入进程内缓存中 (linkedBlockingQueue 五万条)并将 数据推送给数据服务器(kafka临时接收)
4 、消息队列kafka接收数据 先进先出 如果你想要顺序的处理Topic的所有消息,那就只为一个主题提供一个分区
5、elasticsearch接收数据分词 建索引 保存
6、web前端ui页面搜索展示
其实就两部分,一个客户端client,一个服务端server,客户端是以jar包形式提供给客户使用的,只要集成到项目中就可以了。客户端只负责收集日志,服务端中的逻辑主要是2到6,页面展示中会详细展示一个方法的类名、包名、方法名、输入参数、输出参数、执行时间等各种信息,同时提供不同的查询方式,方便错误信息的查找,放一个图供大概展示,ES服务没开,暂时没有数据展示。
这个系统的核心功能就是日志数据的采集,这点是由老司机完成的,主要用到了三种方式:Controller拦截器,log4j的输出,以及全局的异常处理,中间还涉及到线程变量的使用。项目中还有linkedBlockingQueue 及kafka,elasticsearch的使用,具体代码实现会慢慢贴出。