使用aop来实现日志的输出

该博客介绍了如何在Java中通过自定义注解`OperationLogger`和AOP切面`LogAspect`来记录API接口的操作,包括方法名、参数、操作类型等信息,并将这些日志保存到数据库。示例代码展示了注解的使用以及切面如何处理日志记录,包括异常处理和不同操作类型的映射。
摘要由CSDN通过智能技术生成

首先定义一个日志的注解类

/**
 * 将切面类织入个个service,自定义一个注解,为了识别接口操作的类型
 * @author liugang
 * @version 1.0
 * @date 2021/4/28 13:41
 */
@Target({
    ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface OperationLogger {
   

    String name() default "";
    String description() default "";

}

书写一个切面类

package com.xjr.config.log;

import com.xjr.mvc.system.consts.AuthConsts;
import com.xjr.mvc.system.util.JwtTokenUtil;
import com.xjr.mvc.system.xjr_base_log.Xjr_base_log;
import eu.bitwalker.useragentutils.UserAgent;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.Enumeration;
import java.util.UUID;


/**
 * @author liugang
 * @version 1.0
 * @date 2021/4/28 13:35
 */
@Aspect
@Component
public class LogAspect {
   
    //自定义一个切面类
    private static final Logger LOGGER = LogManager.getLogger(LogAspect.class);
    private static final String LOG_CONTENT = "[类名]:%s,[方法]:%s,[参数]:%s";
    private static final String[] METHOD_CONTENT = {
    "insert", "delete", "update", "save","select" };

    @Autowired
    private ISysLogService logService;

    @Pointcut("@annotation(com.xjr.config.log.OperationLogger)")
    public void logPointCut() {
   }

    /**
     * 前置通知
     *
     * @date 2018年11月22日
     *
     * @param joinPoint
     */
    @Before("logPointCut()")
    public void before(JoinPoint joinPoint) {
   
        LOGGER.info("前置通知")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值