分享
2023年基于SpringBootMongoDB的微服务日志系统的实现.docx
下载文档

ID:2000233

大小:21.55KB

页数:7页

格式:DOCX

时间:2023-04-24

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
2023 基于 SpringBootMongoDB 微服 日志 系统 实现
基于SpringBoot+MongoDB的微效劳日志系统的实现 闰四洋 胡昌平 卞德志 左刚 :微效劳的出现大大降低了Web系统的耦合度,但随着微效劳的规模不断增大,其运行日志的数量不断增多、内容也更加杂乱,给用户查看日志数据带来困难,因此对微效劳的运行日志进行处理具有重要意义。文章介绍的微效劳日志系统,采用SpringBoot开发,利用非关系性数据库MongoDB作为日志系统的存储库,提供日志管理的相关接口,从而极大地提高了对日志数据管理和应用的效率。 关键词:微效劳;日志数据;查询;SpringBoot;处理;MongoDB 中图分类号:TP311 文献标识码:A 文章编号:1006-8228〔2023〕08-69-04 0 引言 当前微眼务的治理框架大多采用SpringCloud,如果把基于微效劳架构的系统比作是一栋大楼,钢筋混凝土结构可以说是SpringCloud,那么最根底的砖头瓦块就是SpringBoot。所谓的独立的微效劳是用SpringBoot开发的,作为一套全新的框架,继承了Spring所有的功能并青出于蓝;SpringBoot的约定大于配置的核心思想,默认帮用户做了许多根底设置,很多SpringBoot应用只需要很少的Spring配置就可以正常运行。同时,SpringBoot也提供了很多应用集成包,支持绝大多数开源软件,让用户可以以很低的本钱去集成其他主流开源软件[2]。 MongoDB是一个基于文档模型的,支持索引、复制、事务的数据库,是目前比拟流行的非关系型数据库[1]。微效劳在运行过程中,由于用户访问、方案任务等操作会产生大量日志,而MongoDB数据库系统就非常适合管理这些日志。首先,它易扩展,灵活的文档数据模型可以快捷直观地处理数据;第二,它和关系型数据库有共同点,具有丰富的数据查询语言,其主要的聚合函数操作如表l所示;第三,它以文件形式把数据加载在内存中,假设效劳器的内存资源足够丰富,其插入和查询效率要高于关系型数据库[1]。 由于SpringBoot本身就封装了MongoDB的套件,因此使用SpringBoot整合MongoDB做日志系统的开发,是相得益彰的。 1 实现原理 本系统共分为两个模块。一个是日志记录模块,是一个单独的依赖组件,需要被微效劳所引用,使用Spring的AOP及SpringBoot等技术开发,用于在微效劳运行过程中,对请求的内容以及产生的异常等信息进行捕获处理,并按照微效劳名称以及日期进行分类记录到MongoDB数据库。另一个模块是日志管理模块,是用SpringBoot开发的独立的微效劳,利用了MongoDB的相关特性,可提供日志数据的灵活查询、统计分析、批量删除、批量导出等功能接口供其他微效劳调用[4]。 2 具体实现 2.1 功能模块 2.1.1 日志记录 日志记录模块在微效劳内运行,主要负责在微效劳运行过程中,将其产生的运行日志异步地记录到MongoDB数据库,其功能设计如图l所示。 2.1.2 日志管理 日志管理模块主要负责日志数据的管理,可对数据进行查询、统计分析、批量删除和导出,其功能设计如图2所示。 2.2 软件接口 2.2.1 写日志接口 异步接口,其功能是将微效劳产生的运行日志按照微效劳名称、产生日期进行分类,并记录到MongoDB数据库。 /xx x @param info日志信息 x @param level日志级别1 inf0 2 warn 3 error x/| public void saveLog〔String info, int level〕; 2.2.2 查询日志接口 提供日志数据的查询功能,根据微效劳名称、日志产生日期筛选到指定的日志数据,并可根据具体的时间以及类型做进一步筛选,同时也可以根据日志内容做模糊查询[3,5,6]。 /xx @param appName微效劳名称x @param date检索日期x @param time检索時间x @param timeType检索时间类型x @param searchStr检索字符串x/ public ListgetAppLogs〔String appName, LocaIDate date, LocaITime time, int timeType, String searchStr〕; 2.2.3 统计分析接口 可根据微效劳名称、分析类型、检索字符串等条件,同时利用MongoDB的聚合函数等,对日志数据进行统计分析,例如按小时、天、月统计某个微效劳的日志数量。 /xx x @param appName微效劳名称 x @param type分析类型 x @param searchStr检索字符串 x/ public Object analyseAppLogs〔String appName, int type, String searchStr〕; 2.2.4批量删除日志接口 根据微效劳名称及指定的日期范围对日志进行批量删除。 /xx x @param appName微效劳名称 x @param startDate删除范围的起始日期 x @param endDate删除范围的截止日期 x/ public void deleteAppLogs〔String appName, LocaIDate startDate, LocaIDate endDate〕; 2.2.5 批量导出日志接口 根据微效劳名称及指定的时间范围对日志进行批量导出。 /xx x @param appName微效劳名称 x @param startDate导出范围的起始时间 x @param endDate导出范围的截止时间 x/ public void exportAppLogs〔String appName, LocaIDate startDate, LocaIDate endDate, int type〕; 2.3 日志表设计 为了方便日志系统将来拓展,特增加几个备用属性,表定义见表2。 3 工程代码 3.1 日志记录接口 在业务系统的实际开发中,需要对日志进行不同级别的记录,这里提供四个级别的接口,来分别记录不同级别的日志。 public interfaceLogger〔 /★调试级别,不记录/x, void debug〔String info〕; /x info级别x/, void info〔String info〕; /x warn级别 x/, void warn〔String info〕; /x error级别x/ void error〔String info〕; 〕 3.2 请求跟踪 对于微效劳接收的请求,可以利用AOP切面技术来处理。首先可以利用Pointcut注解来对所有的web接口进行匹配,这样就可以在每一个请求的流转过程中进行内容的处理并记录日志[4]。 /x切点,匹配包路径最后为controller的所有包下面类的所有方法+, @Pointcut〔〞execution〔++..controIIerx.x〔..〕〕〞〕 public void printPointCutController〔〕O /x切点,匹配所有带有RequestMapping注解的方法x/, @Pointcut〔〞@annotation〔org.springframework.web.bind .annotation.RequestMapping〕“〕 public void printPointCutRequestMapping〔〕O /x AOP切点交集,针对所有的web接口 x/, @Pointcut〔〞printPointCutController0&& printPointCutRequestMapping0〞〕 public void printPointCut〔〕0 /x调用web接口之前调用此方法,可以对请求的路径、地址、 内容等进行记录x/, @Before〔〞printPointCut〔〕〞〕 public void doBefore〔JoinPoint joinPoint〕{…〕 /x调用web接口之后调用此方法,可以对请求的返回结果等进行记录x, @AfterReturning〔returning=〞ret〞, pointcut=〞printPointCut0〞〕 public void doAfterReturning〔Object ret〕{…} /x调用web接口的过程中调用此方法,可以对请求的响应时 间等进行记录+, @Around〔〞printPointCut〔〕〞〕 public Object doAround〔ProceedingjoinPoint pjp〕{…} 3.3 异常捕获 在工具类上使用RestControllerAdvice注解可捕获运行过程中产生的异常,而在方法上使用ExceptionHandler注解会匹配异常。一旦捕获异常,此工具类会按照方法定义的前后顺序去匹配异常执行。 @RestControllerAdvice public class ExceptionHandler{ r匹配空指针异常x, @ Exception Handler〔N uIIPointerException.class〕 public Object handleRException〔RException e〕{…} /x匹配所有异常x/ @ExceptionHandler〔Exception.class〕 public Object handleRException〔RException e〕{…}} 4 結束语 本文针对微效劳日志规模庞大、难管理的问题,利用Spring的AOP切面技术、SpringBoot的配置管理及MongoDB数据库实现了对分散的微效劳运行日志的统一收集处理。利用Spring的切面及SpringBoot的配置[6],可以获取到微效劳的运行日志及异常信息。使用MongoDB数据库做存储,主要是MongoDB的易拓展、高性能等特性以及具备一定的统计分析查询功能,可以快速地对日志进行记录并可以灵活地查询、统计分析等。 目前,根据上面的设计开发的日志系统已成功应用到多个微效劳平台,运行状况良好,用户可直观便捷地对日志进行查询统计,大大提高了后台日志的利用率。 参考文献〔References〕: [1]宋瑜辉.基于MongoDB存储和分析辅助决裳系统中的海量日志[J].科技创新与应用,2023:2095-2945 [2]张骁,应时,张韬.应用软件运行日志的收集与效劳处理框架[J].计算机工程与应用,2023.10:1002-8331 [3]杨旭东,陈婷,梁潇聆.基于web的本科毕业师生双选系统开发设计[J].软件,2023.39〔5〕:182-188 [4]李天赐,余海情.基于SSH框架试题系统的设计与实现[J].软件,2023.39〔6〕:74-77 [5]周芷仪,陈婷,袁莹静,陈龙.基于JavaScript的电子时钟效果实现[J].软件,2023.40〔3〕:60-64 [6]陈申平.敏捷软件开发中的配置管理探讨[J].软件,2023.39〔5〕:134-138 x基金工程:中国船舶集团科技创新工程〔202323K〕 作者简介:闫四洋〔1993-〕,男,江苏连云港人,本科,工程师,主要研究方向:企业应用开发。

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开