type
status
date
slug
summary
tags
category
icon
password
最近完成了上头布置的日志瘦身任务,总的来说有几个关键地方。
首先要知道哪个部分业务的log是必须打印的;
怎么自动化去除不需要的log.info—>aop+切点
把对应的内容标上自定义的注解,直接跳过即可。
总的来说,我处理的方式:
1.自定义一个注解
2.在yml配置好对应的一个属性,可以理解为开关。对应logProperties里面设置了get set方法
3.定义好一个切面,用于结合自定义的注解,实现过滤功能。
4.在不需要打印的地方,把那个注解贴上就行
比如下面搞了一个:
AOP
AOP允许我们在不修改原有代码的情况下,通过预编译方式和运行期动态代理实现在方法执行前后插入额外的逻辑。
切点(Pointcut)
通过切点表达式,我们可以精确地指定哪些方法需要应用这些切面逻辑。例如:
@annotation(
xxx.NoPrintLoopLog)
表示只有方法上有@NoPrintLoopLog
注解时,才会应用noLogInterceptor
方法。
@annotation(
xxx.annotation.RecordLog)
和@within(
xxx.log.annotation.RecordLog)
表示方法或类上有@RecordLog
注解时,才会应用logInterceptor
方法。
环绕通知
@Around
注解定义了一个环绕通知,它可以在目标方法执行前后执行自定义的逻辑。noLogInterceptor
和 logInterceptor
方法都是环绕通知的实现。总结
自定义注解+AOP的方式会更灵活处理日志是否打印的问题,日志太大很影响上线之后,在客户那边的文件太大。