Springboot接口项目如何使用接口项目如何使用AOP记录日志记录日志
主要介绍了Springboot接口项目如何使用AOP记录日志,文中通过示例代码介绍的非常详细,对大家的学习或者
工作具有一定的参考学习价值,需要的朋友可以参考下
一、一、 背景背景
一直想给项目构建一个统一的日志收集系统,先迈出第一步,构建一个日志收集类,用AOP实现无侵入日志收集
二、二、 环境环境
1.此随笔内容基于spring boot项目
2.数据库为mysql 5.7.9版本
3.jdk 版本为1.8
三、三、 说明说明
此版采用数据库存储,之后考虑使用elasticsearch等工具存储
四、四、 内容内容
1、构建日志采集实体类:BaseLogMessage
public class BaseLogMessage {
private String serverIP;
private String appName;
private String method;
private String type;
private String userCode;
private String uri;
private String operationName;
private String operationStatus;
private long startTime;
private Object parameter;
private Object result;
private int SpendTime;
// 此处省略get、set
}
2、构建一个配置文件读取类,用于读取配置文件中的系统名称:SystemPropetiesUtil
@Configuration
public class SystemPropetiesUtil {
@Value("${spring.application.name}")
private String sysName;//系统名称<br> // 此处省略get、set<br>}
3、新建一个AOP类,在控制器方法上作为切点,执行日志收集: LogAspect
@Aspect
@Component
public class LogAspect {
@Autowired
private SystemPropetiesUtil systemPropetiesUtil;
//定义切点方法
@Pointcut("execution(public * cq..campus.prevented.controller.*.*(..))")
public void controllerLog() {
}
public static final Logger LOGGER = LoggerFactory.getLogger(LogAspect.class);
@Around("controllerLog()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
long startTime = System.currentTimeMillis();
//获取当前请求对象
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//记录请求信息
BaseLogMessage baseLogMessage = new BaseLogMessage();
//1.获取到所有的参数值的数组
Object[] args = joinPoint.getArgs();
Signature signature = joinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
//2.获取到方法的所有参数名称的字符串数组
String[] parameterNames = methodSignature.getParameterNames();