基于SpringBoot的日志集中收集、微服务使用及切面的使用

在以前文章中,我们介绍了SpringBoot的使用,详见:

一篇文章全面了解SpringBoot

,通过SpringBoot我们可以很方便的开发后台Restful接口,前端代码可通过调用这些接口调取动态数据,本文主要介绍基于SpringBoot经常面临到的一些其他常见问题做个整理;

在一篇文章全面了解SpringBoot这篇文章中我们解决了:

配置文件怎么管理,不同的环境配置文件怎么区分(如QA,生产和开发环境);

项目怎么做集成测试和单元测试:不光单元测试,还包括模拟用户的真实操作;

修改Java代码的时候帮我自动重启服务器,以便能实时反映修改情况;

修改静态页面代码,网页无需手动刷新,帮我自动LiveReload;

部署打包怎么实现一键部署?

项目如何做到横向扩展,即怎么保持各个Web项目sessionid同步?

发布的项目如何做监控,怎么无缝扩展监控指标?

项目中如何剥离“脚本类”代码,比如公式定义等?

Web安全是否每次需要我自己实现,比如处理登录,登出,URI保护等?

繁杂的数据库操作我是否一定要写一大堆BO,VO,Service,DAO?

JavaBean中一定要写这么多Getter和Setter么?

maven中的依赖引入与排除,版本冲突是否非得我自己整理和排查?

项目进行中的数据库脚本管理怎么管理?防止变更错误,跨数据库的脚本管理呢?

这篇文章我们进一步解决:

SpringBoot启用log4j记录日志,并发日志发往log4j日志中心(集中化日志管理与监控);

SpringBoot调用微服务Dubbo;

SpringBoot中使用切面:接口调用统计,API权限分级等;

日志集中式管理与监控

首先我们需要做一个Socket的服务端,基于Netty自定义包头包体的TCP程序设计我们会在下一篇介绍并给出源码,这里记为logger-server程序,项目中,只需要引入client的maven jar即可,自定义的Log4j的Appender的实现较为简单,本文不做介绍,这一切都就绪后,在项目只需要引入maven和配置即可实现将log发往日志中心:

添加maven依赖

在资源目录下新建:

在代码任意处利用log4j写入日志,如:

至此,通过nettyIOAppender ref的Logger都会将日志发往日志中心,在那里你可以得到哪个类,哪个方法,来自哪个用户做了什么处理,可以收集到用户使用的浏览器信息,来源IP,访问来源等有效信息,可用于接口统计,用户行为收集,排错跟踪等,下图是Netty服务端收到的消息:

Dubbo微服务的使用

在我们设计和实现后台架构时,我们会把公共的服务做成微服务以便所有系统可以共享,比如在一个电商系统中,我们会把商品分类,商品详情信息,用户等信息封装成微服务,这样网站,客服系统,统计统计,CRM系统等会可以调用这些微服务,减少重复开发,而且微服务框架一般还提供负载均衡,版本控制,限流等诸多功能;

Alibaba的团队针对Dubbo的使用专门提供了SpringBoot的maven依赖工程:

在我们编写后台服务时,如需调用微服务(消费方),我们只需要在Controller里将微服务的Service依赖注入进来即可:

并在中加入配置:

Aspect切面的使用

在我们项目开发中,我们经常会碰到统计接口调用次数以及API分级调用(有些接口需要特定API级别才能调用)的功能,这时我们就可以使用到切面,使用步骤如下:

编写一个类,在SpringBoot启动后,订阅的xxx频道;

编写一个切面类,定义类,拦截所有的前置请求用于统计接口调用,并定义一个环绕通知,控制用户是否有权限调用该类的方法

至此,我们解决SpringBoot中的这三个常见用法,希望对你有帮助;

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

扫码关注云+社区

领取腾讯云代金券