Spring Boot从入门到实战:集成AOPLog来记录接口访问日志

日志是一个Web项目中必不可少的部分,借助它我们可以做许多事情,比如问题排查、访问统计、监控告警等。一般通过引入slf4j的一些实现框架来做日志功能,如log4j,logback,log4j2,其性能也是依次增强。在springboot中,默认使用的框架是logback。我们经常需要在方法开头或结尾加日志记录传入参数或返回结果,以此来复现当时的请求情况。但是手动添加日志,不仅繁琐重复,也影响代码的美观简洁。本文引入一个基于AOP实现的日志框架,并通过spring-boot-starter的方式完成集成。

原文地址:

1. aop-logging项目

项目地址: https://github.com/ronwxy/aop-logging
该项目基于 https://github.com/nickvl/aop-logging.git , 在其基础上添加了ReqId来串联某次客户端请求(参考com.github.nickvl.xspring.core.log.aop.ReqIdFilter), 添加了方法执行时长(参考com.github.nickvl.xspring.core.log.aop.AOPLogger.logTheMethod方法中elapsedTime)。

该项目提供了基于注解的AOP日志功能。根据不同的日志级别,提供的注解有LogTrace,LogDebug,LogInfo,LogWarn,LogError,LogFatal,LogException,可修饰于类(等同于该类内所有方法上添加)与方法上,前面六个分别表示在不同日志级别下记录方法被调用的日志,LogException表示在方法抛出异常时,记录相应日志。这些注解都提供了一个LogPoint枚举类型的属性value,取值{IN,OUT,BOTH},分别表示在方法调用入口、方法调用返回前,以及包含两者的位置打印对应日志,默认为BOTH。

2. 集成

可以通过基于xml或基于java配置的方式来集成AOP日志功能,我这里基于java配置(基于xml的方式参考源码README文件)并且通过spring-boot-starter的形式进行封装(源码地址: https://github.com/ronwxy/base-spring-boot ),避免每个项目都需要配置。自动配置类如下

@Configuration @ConditionalOnClass(AOPLogger.class) @ConditionalOnMissingBean(AOPLogger.class) public class AopLoggerAutoConfiguration { private static final boolean SKIP_NULL_FIELDS = true; private static final Set<String> EXCLUDE_SECURE_FIELD_NAMES = Collections.emptySet(); @Bean public AOPLogger aopLogger() { AOPLogger aopLogger = new AOPLogger(); aopLogger.setLogAdapter(new UniversalLogAdapter(SKIP_NULL_FIELDS, EXCLUDE_SECURE_FIELD_NAMES)); return aopLogger; } /** * 注册一个过滤器,用来生成一个reqId,标记一次请求,从而将本次请求所产生的日志串联起来 * @param * @return */ @Bean public FilterRegistrationBean reqIdFilter() { ReqIdFilter reqIdFilter = new ReqIdFilter(); FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(reqIdFilter); List<String> urlPatterns = Collections.singletonList("/*"); registrationBean.setUrlPatterns(urlPatterns); registrationBean.setOrder(100); return registrationBean; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdfjd.html