保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

SpringBoot和Aspect实现自建Log日志功能

  原文链接:https:blog。51cto。comxiaowangshushu5358590一、效果
  二、技术
  JDK1。8
  SpringBoot2。0、Aspect注解
  MySql5。6三、代码干货
  Log实体对象类。javapackage。。。modules。sys。log。entity;importjava。io。Serializable;importjava。util。Date;importjavax。persistence。Column;importjavax。persistence。Entity;importjavax。persistence。Id;importjavax。persistence。Table;importorg。springframework。stereotype。Component;importio。swagger。annotations。ApiModelProperty;EntityTable(namesyslog)Componentorg。hibernate。annotations。Table(comment系统ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a信息,appliesTosyslog)publicclassSysLogimplementsSerializable{privatestaticfinallongserialVersionUID42L;IdApiModelProperty(主键)Column(nameid,nullablefalse,columnDefinitionbigint(64)comment主键)privateLongid;主键IdApiModelProperty(ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a编号)Column(namelogid,columnDefinitionvarchar(255)commentahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a编号)privateStringlogId;ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a编号ApiModelProperty(请求链接)Column(nameurl,columnDefinitiontextcomment请求链接)privateStringurl;请求链接ApiModelProperty(请求方法)Column(namemethod,columnDefinitiontextcomment请求方法)privateStringmethod;请求方法ApiModelProperty(请求类名)Column(nameclassname,columnDefinitiontextcomment请求类名)privateStringclassName;请求方法ApiModelProperty(请求方法名)Column(namemethodname,columnDefinitiontextcomment请求方法名)privateStringmethodName;请求方法ApiModelProperty(请求参数)Column(nameparams,columnDefinitiontextcomment请求参数)privateStringparams;请求参数ApiModelProperty(ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a类型:(1:系统ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a2:业务ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a))Column(namelottype,columnDefinitionvarchar(255)commentahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a类型:(1:系统ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a2:业务ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a))privateStringlogType;请求方法ApiModelProperty(请求方式:(GETPOST))Column(nametype,columnDefinitionvarchar(255)comment请求方式(GETPOST))privateStringtype;请求方法ApiModelProperty(请求IP)Column(nameIP,columnDefinitiontextcomment请求IP)privateStringip;请求方法ApiModelProperty(操作的数据库表)Column(namelogtable,columnDefinitionvarchar(255)comment操作的数据库表)privateStringtable;操作的数据库表ApiModelProperty(请求异常)Column(namelogerror,columnDefinitiontextcomment请求异常)privateStringlogError;请求异常ApiModelProperty(运行时长)Column(nametime,columnDefinitionvarchar(255)comment运行时长)privatelongtime;ApiModelProperty(备注)Column(namelogcomment,columnDefinitiontextcomment备注)privateStringlogComment;备注ApiModelProperty(创建人)Column(namecreateby)privateStringcreateBy;创建人ApiModelProperty(创建时间)Column(namecreatetime)privateDatecreateTime;创建时间setter()getter();}四、基本的CRUDpackage。。。modules。sys。log。controller;importjava。util。List;importorg。springframework。beans。factory。annotation。Autowired;importorg。springframework。web。bind。annotation。CrossOrigin;importorg。springframework。web。bind。annotation。GetMapping;importorg。springframework。web。bind。annotation。RequestMapping;importorg。springframework。web。bind。annotation。ResponseBody;importorg。springframework。web。bind。annotation。RestController;import。modules。sys。log。entity。SysLog;import。modules。sys。log。service。SysLogService;importio。swagger。annotations。ApiOperation;CrossOrigin跨域RestControllerRequestMapping(SysLog)publicclassSysLogController{AutowiredpublicSysLogServicesysLogService;添加AOP注解ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a管理SysLogAspectValue(describtion获取所有ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a列表信息,logType1,typePOST,urlSysLogSelectAllSysLog,tablesyslog,paramsSysLog,methodPOST)ResponseBodyApiOperation(value获取所有ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a列表信息,notesSysLogSelectAllSysLog)GetMapping(valueSelectAllSysLog)publicListSysLogSelectAllSysLog(){returnsysLogService。SelectAllSysLogList(page)。getContent();}}package。。modules。sys。log。service;importorg。springframework。data。domain。Page;import。。t。modules。sys。log。entity。SysLog;系统ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a接口ClassName:SysLogServiceDescription:TODO(描述)authorauthordate2019120310:55:22publicinterfaceSysLogService{ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a保存Title:saveDescription:TODO(描述)paramsysLogauthorauthordate2019121009:56:28voidsave(SysLogsysLog);}package。。。modules。sys。log。service。impl;importjava。util。ArrayList;importjava。util。List;importjavax。persistence。criteria。CriteriaBuilder;importjavax。persistence。criteria。CriteriaQuery;importjavax。persistence。criteria。Predicate;importjavax。persistence。criteria。Root;importorg。springframework。beans。factory。annotation。Autowired;importorg。springframework。data。domain。Page;importorg。springframework。data。domain。PageRequest;importorg。springframework。data。domain。Pageable;importorg。springframework。data。domain。Sort;importorg。springframework。data。jpa。domain。Specification;importorg。springframework。stereotype。Service;import。。。。。modules。sys。log。entity。SysLog;import。。。。。。。。modules。sys。log。repository。SysLogRepository;import。。。。。。。。。。modules。sys。log。service。SysLogService;系统ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a实现类ClassName:SysLogServiceImplDescription:TODO(描述)authorauthordate2019120310:55:17Service(SysLogService)publicclassSysLogServiceImplimplementsSysLogService{AutowiredpublicSysLogRepositorysysLogRepository;OverridepublicPageSysLogSelectAllSysLogList(intpage){SortsortnewSort(Sort。Direction。DESC,createTime);创建时间正序排列PageablepageablePageRequest。of(page,this。size,sort);PageSysLogsysLogsysLogRepository。findAll(newSpecificationSysLog(){OverridepublicPredicatetoPredicate(RootSysLogroot,CriteriaQuerylt;?query,CriteriaBuildercriteriaBuilder){ListPredicatelistnewArrayListPredicate();拼接where条件Predicate〔〕pnewPredicate〔list。size()〕;returncriteriaBuilder。and(list。toArray(p));}},pageable);returnsysLog;}Overridepublicvoidsave(SysLogsysLog){sysLogRepository。save(sysLog);}}package。。。。。。。modules。sys。log。repository;importorg。springframework。data。jpa。domain。Specification;importorg。springframework。data。jpa。repository。JpaRepository;import。。。。。。。。modules。sys。log。entity。SysLog;系统ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a管理类ClassName:SysLogRepositoryDescription:TODO(描述)authorauthordate2019120310:55:09publicinterfaceSysLogRepositoryextendsJpaRepositorySysLog,Long{}
  已上就是基本的业务功能中的CRUD的功能,下面就是重点的log的AOP切面功能,,,五、AOP切面功能动态获取log信息
  1)、在每个需要用到的方法头上增加注释,附加案例【四中第一个截图】package。。。。。。。。modules。sys。log。controller;importjava。lang。annotation。Documented;importjava。lang。annotation。ElementType;importjava。lang。annotation。Retention;importjava。lang。annotation。RetentionPolicy;importjava。lang。annotation。Target;系统ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a管理表ClassName:SysLogControllerDescription:TODO(描述)authorauthordate2019120310:54:52Target(ElementType。METHOD)Retention(RetentionPolicy。RUNTIME)Documented注释文档publicinterfaceSysLogAspectValue{Stringdescribtion()default;ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a描述StringlogType()default1;ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a种类1:系统ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a2:业务ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志aStringtype()defaultGET;请求方式:(GETPOST)Stringurl()default;请求链接Stringtable()default;操作的数据库表Stringparams()default;请求参数Stringmethod()default;请求方法}
  制作切面内容package。。。。。。。modules。sys。log。controller;importjava。lang。reflect。Method;importjava。util。ArrayList;importjava。util。Date;importjava。util。List;importjavax。servlet。http。HttpServletRequest;importorg。aspectj。lang。JoinPoint;importorg。aspectj。lang。ProceedingJoinPoint;importorg。aspectj。lang。annotation。AfterThrowing;importorg。aspectj。lang。annotation。Around;importorg。aspectj。lang。annotation。Aspect;importorg。aspectj。lang。annotation。Pointcut;importorg。aspectj。lang。reflect。MethodSignature;importorg。springframework。beans。factory。annotation。Autowired;importorg。springframework。stereotype。Component;importorg。springframework。web。context。request。RequestContextHolder;importorg。springframework。web。context。request。ServletRequestAttributes;importcom。google。gson。Gson;import。。。。。。common。utils。IdGenerate;import。。。。。。modules。sys。log。entity。SysLog;import。。。。。。modules。sys。log。service。SysLogService;系统ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a切面ClassName:SysLogAspectDescription:TODO(描述)authorauthordate2019120410:34:41Aspect使用Aspect注解声明一个切面ComponentpublicclassSystemLogAspect{privatefinalStringPOINTCUTannotation(。。。。。modules。sys。log。entity);privatestaticfinalorg。slf4j。Loggerlogorg。slf4j。LoggerFactory。getLogger(SystemLogAspect。class);AutowiredpublicSysLogServicesysLogService;这里我们使用注解的形式当然,我们也可以通过切点表达式直接指定需要拦截的package,需要拦截的class以及method切点表达式:execution(。。。)Pointcut(POINTCUT)publicvoidPointCut(){}环绕通知Around,当然也可以使用Before(前置通知)After(后置通知)parampointreturnthrowsThrowableAround(POINTCUT)Around(annotation(SysLogAspectValue))publicObjectaround(ProceedingJoinPointpoint)throwsThrowable{longbeginTimeSystem。currentTimeMillis();Objectresultpoint。proceed();try{正常保存ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志asaveLog(point,System。currentTimeMillis()beginTime);}catch(Exceptione){异常保存ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志aafterReturningMethod(point,e);}returnresult;}捕获异常Title:afterReturningMethodDescription:TODO(描述)paramjoinPointparameauthorauthorthrowsThrowabledate2019121001:40:37AfterThrowing(throwingexception,valueannotation(SysLogAspectValue),argNamesexception)publicvoidafterReturningMethod(JoinPointjoinPoint,Exceptione)throwsThrowable{if(e!null){SysLogsysLognewSysLog();longbeginTimeSystem。currentTimeMillis();longtimeSystem。currentTimeMillis()beginTime;MethodSignaturesignature(MethodSignature)joinPoint。getSignature();Methodmethodsignature。getMethod();接收到请求,记录请求内容ServletRequestAttributesattributes(ServletRequestAttributes)RequestContextHolder。getRequestAttributes();HttpServletRequestrequestattributes。getRequest();sysLog。setId(IdGenerate。longUUIDId());主键sysLog。setLogId(sysLog。getId()。toString());ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a编号sysLog。setTime(time);时长sysLog。setIp(request。getRemoteAddr());请求的IPsysLog。setCreateBy(sysLog。getIp());请求人sysLog。setCreateTime(newDate());创建时间SysLogAspectValuesysLogAspectValuemethod。getAnnotation(SysLogAspectValue。class);if(sysLogAspectValue!null){注解上的描述sysLog。setLogComment(sysLogAspectValue。describtion());备注sysLog。setLogType(sysLogAspectValue。logType());ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a类型sysLog。setType(sysLogAspectValue。type());请求类型sysLog。setUrl(sysLogAspectValue。url());请求链接sysLog。setTable(sysLogAspectValue。table());操作的数据表sysLog。setMethod(sysLogAspectValue。method());操作请求方法}请求的类名、方法名sysLog。setClassName(joinPoint。getTarget()。getClass()。getName());类名sysLog。setMethodName(signature。getName());方法名请求的参数Object〔〕argsjoinPoint。getArgs();ListStringlistnewArrayListString();for(Objecto:args){list。add(newGson()。toJson(o));}sysLog。setParams(Params:〔list。toString()〕:AspectjAfterThrowing);sysLog。setLogError(joinPoint。getSignature()。getName()〔message:e。getMessage()〕:AspectjAfterThrowing);System。out。println(异常保存ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a成功);sysLogService。save(sysLog);log。trace(POINTCUT,sysLog);System。out。println(异常保存ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a结束);}}正常保存ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志aparamjoinPointparamtimethrowsThrowablepublicvoidsaveLog(ProceedingJoinPointjoinPoint,longtime){SysLogsysLognewSysLog();sysLogthis。addSysLog(joinPoint,sysLog,time);请求的参数Object〔〕argsjoinPoint。getArgs();ListStringlistnewArrayListString();for(Objecto:args){list。add(newGson()。toJson(o));}sysLog。setParams(Params:〔list。toString()〕:AspectjAround);sysLog。setLogError(〔message:无〕:AspectjAround);System。out。println(正常保存ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a成功);sysLogService。save(sysLog);log。trace(POINTCUT,sysLog);System。out。println(正常保存ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a结束);}组装ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志amodelTitle:addSysLogDescription:TODO(描述)paramsysLogreturnauthorauthordate2019121002:09:04publicSysLogaddSysLog(ProceedingJoinPointjoinPoint,SysLogsysLog,longtime){MethodSignaturesignature(MethodSignature)joinPoint。getSignature();Methodmethodsignature。getMethod();接收到请求,记录请求内容ServletRequestAttributesattributes(ServletRequestAttributes)RequestContextHolder。getRequestAttributes();HttpServletRequestrequestattributes。getRequest();sysLog。setId(IdGenerate。longUUIDId());主键sysLog。setLogId(sysLog。getId()。toString());ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a编号sysLog。setTime(time);时长sysLog。setIp(request。getRemoteAddr());请求的IPsysLog。setCreateBy(sysLog。getIp());请求人sysLog。setCreateTime(newDate());创建时间SysLogAspectValuesysLogAspectValuemethod。getAnnotation(SysLogAspectValue。class);if(sysLogAspectValue!null){注解上的描述sysLog。setLogComment(sysLogAspectValue。describtion());备注sysLog。setLogType(sysLogAspectValue。logType());ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a类型sysLog。setType(sysLogAspectValue。type());请求类型sysLog。setUrl(sysLogAspectValue。url());请求链接sysLog。setTable(sysLogAspectValue。table());操作的数据表sysLog。setMethod(sysLogAspectValue。method());操作请求方法}请求的类名、方法名sysLog。setClassName(joinPoint。getTarget()。getClass()。getName());类名sysLog。setMethodName(signature。getName());方法名returnsysLog;}}
  生成这个Log切面日志的用法:

大一学期总结作文500字大一学期过去了,我们需要写总结了,小编收集了大一学期总结作文,欢迎阅读!大一学期总结作文一时间过得真快,一年的大学生活过去了。我从20xx年进入XX大学就读以来,一直以严……最忙出差三人组!神舟十四号乘组太空之旅都要做什么?神舟十四号飞船将陈冬、刘洋和蔡旭哲送达空间站天和核心舱之后,三名航天员就将开始忙碌的太空之旅。神舟十四号航天员乘组所承担的任务,可以说是空间站建设以来最忙碌的,未来在轨驻留六个……月亮如何偷地球上的水?人类唯一踏足过的除地球之外的天体月球,看似是一个死寂的世界,表面极其荒凉。但事实是月球上的水资源比人类想象的还要多,这些是如何形成的呢?关于这个问题有多种说法:小行星和彗星碰撞……或许未来,人类可以在水中呼吸在卡梅隆的电影《深渊》里有这样一段情节,男主必须要下到海底的深渊去阻止一个将要爆炸的核弹。为了让他能够实现在水下长时间的呼吸,使用了液体呼吸技术。男主在经历了初始艰难的适应期后……死里逃生五年级作文450字那是一个星期天的下午,爸爸妈妈都出去有事了,我难得有这么一个自由空间,可谓是小鬼当家。我一会儿看电视,一会儿玩游戏,真是想玩什么就玩什么,甭提多高兴了。过了一会儿我嫌这些……台儿庄古城之旅作文600字今年的元旦,我和爸爸妈妈一起来到了,被誉为ldquo;天下第一庄rdquo;的台儿庄,游览了古色古香的运河古城。我们走进古城远远地望见了一座年代久远,饱经沧桑的古城。厚厚……那年,我七岁800字作文前序:好久好久没有这般认真的想写下点什么了,突然想到,写下些零碎的记忆,来记录自己的人生吧!尽管自己的人生微不足道,但那也是自己曾经走过的路,在路上遇到的人,遇到的事。曾……用设计诠释搜索热点编辑导语:如今刷手机已经成了大多数人茶余饭后的消遣方式,那么大家所关注的这些事情是如何聚集在一起呈现出来的呢?本文作者做了详细的解释,一起来看看。刷刷手机看看今天又发生了……清纯少女变中年妇女!莎拉波娃颜值下滑,挺孕肚和二婚老公秀恩爱俄罗斯美女莎拉波娃是一代人的青春回忆,当年只有17岁的莎拉波娃在温网一战封神,在决赛的舞台上击败了小威廉姆斯,拿到了人生中的第一个大满贯冠军,后来莎拉波娃经过多年的历练,又拿下……古有暴雨救司马懿,今有三分雨救凯尔特人谁能想到,勇士与凯尔特人G1是这么安排的,先是库里第一节单节6记三分平创纪录,单节砍下21分的高分,一直到第三节结束领先12分,在第四节开打勇士时一度领先着凯尔特人15分之多,……12中2!3中0!格林多项数据垫底成勇士罪人,杜兰特看戏一幕勇士与凯尔特人总决赛G1已经落下帷幕,在第三节手握12分领先的情况下,末节被对手连续打出进攻高潮,一波09和一波317彻底失去比赛悬念,单节1640狂输24分,成为NBA历史上……广东队三消息顶级前锋将加盟,易建联捐款2千万,王怀玉带队强训顶级前锋将加盟广东队。北京时间6月3日,CBA休赛期不知不觉已经过去一个月时间,目前各支球队进入到紧张的补强集训当中,今年休赛期广东队阵容中一共有9名球员合同到期,分别是……
猫狗大战小学作文500字今天,我放学了,正背起书包回家走的时候,突然听到很吵的声音从树丛中发出,我感到很好奇,便想看个究竟。我小心翼翼地走来树丛中,一看,呀!这不是程哥哥家的狗狗淘淘和一个小男孩……让我玩心大起的机械键盘,杜伽K610W体验,颜值高操控好耐折我上手的第一块机械键盘是杜伽K320,说实在的我选择这款机械键盘的主要原因,并不是网友所说的那些打字体验如何,游戏操控怎样,其实我更看重的是K320的外观设计,以及机械键盘的可……新时代新孝道作文600字我有一个非常疼爱我的外婆。几乎每次见到外婆,她的手都离不开锅铲,因为我的外婆很喜欢做菜,只要是从她手里煮出来的菜肴,都如同山珍海味,美味可口。我喜欢阅读,经常正当我……初三日记挫折(五)人生,总不会一帆风顺的吧?难免都会遇到一点挫折,正所谓人生没有与挫折打交道,就永远不会长大。面对挫折,你会怎样做呢?是选择逃避,畏缩;还是选择勇敢地去面对呢?我想,不同的人都会……六个字便足以温暖我的心初三作文感动,也许不需要什么华丽的语言,对于我来说,只需六个字,便足以温暖我的心!那六个字是母亲的叮嘱,它温柔细腻,满含关心,融入了母亲无尽的爱,似一缕冬日的阳光,静静洒下,但却……拓维信息旗下开鸿智谷成为HarmonyOSConnectIS5月31日6月1日,由华为主办的2022HarmonyOSConnect伙伴峰会在深圳召开。作为开放原子开源基金会银牌捐赠人、OpenHarmony生态重要共建单位,拓维信息及……到2025年,人类存储的信息总量将超过400ZB现代世界的数字化深度越大,需要存储的数据量就越大。所以,存储信息的问题变得非常严重。科学家们估计,到2025年,地球上的用户数据总量将超过400ZB(泽字节,计算机存储容量单位……历史上的今天中国互联网络信息中心成立中国互联网络信息中心(ChinaInternetNetworkInformationCenter,简称CNNIC)是经国家主管部门批准,于1997年6月3日组建的管理和服务机构……以父亲为话题的作文范本引导语:父爱是一缕阳光,让你的心灵即使在寒冷的冬天也能感到温暖如春。本文是小编为大家整理的以父亲为话题的作文范本,欢迎阅读。以父亲为话题的作文1:从小就在我身边陪伴我,给……老照片,九十年代女性形象,青春时尚有自信这是一组女生照片,拍摄于上世纪九十年代。老照片上的这些女生,青春靓丽,打扮时尚。她们充满了自信,对生活充满热爱,对未来充满希望。这样的女性,自然且漂亮,十分迷人。一起来欣赏这些……怎样能拍出好看的街拍照片?怎样能拍出好看的街拍照片街拍作为一种文化现象,在世界各地是很广泛的。如果想拍出好看的街拍照片,需要注意以下几个方面的问题:1。首先是确定街拍的主题以及所要表达的中心思想。……大面积关站点三年烧光114亿,生鲜电商巨头彻底崩塌?互联网时代,天底下没有难做的生意,不过,赚钱的生意,却没那么容易。连撤三城,关闭部分城市站点日前,叮咚买菜将退出安徽市场登上热搜!据多家媒体爆料称,叮咚买菜方……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网