Registro del sistema unificado del proyecto

Registro del sistema

Al usar el springmarco aop, podemos lograr la disociación del código comercial y los servicios a nivel del sistema, como el registro, las transacciones y otros servicios de seguridad, que pueden hacer que nuestros proyectos sean más fáciles de mantener y elegantes. ¿Cómo agregar el registro correspondiente en el sistema?

Agregar dependencia
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
Anotación personalizada
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLog {
    
    
    String value() default "";
}

Aspecto de configuración
@Aspect
@Component
public class SysLogAspect {
    
    
    @Autowired
    private SysLogService sysLogService;
    private static Logger logger = LoggerFactory.getLogger(SysLogAspect.class);

    @Around("@annotation(sysLog)")
    public Object around(ProceedingJoinPoint joinPoint,com.yami.shop.common.annotation.SysLog sysLog) throws Throwable {
    
    
        long beginTime = SystemClock.now();
        //执行方法
        Object result = joinPoint.proceed();
        //执行时长(毫秒)
        long time = SystemClock.now() - beginTime;

        SysLog sysLogEntity = new SysLog();
        if(sysLog != null){
    
    
            //注解上的描述
            sysLogEntity.setOperation(sysLog.value());
        }

        //请求的方法名
        String className = joinPoint.getTarget().getClass().getName();
        String methodName = joinPoint.getSignature().getName();
        sysLogEntity.setMethod(className + "." + methodName + "()");

        //请求的参数
        Object[] args = joinPoint.getArgs();
        String params = Json.toJsonString(args[0]);
        sysLogEntity.setParams(params);

        //设置IP地址
        sysLogEntity.setIp(IPHelper.getIpAddr());
        //用户名
        String username = SecurityUtils.getSysUser().getUsername();
        sysLogEntity.setUsername(username);
        sysLogEntity.setTime(time);
        sysLogEntity.setCreateDate(new Date());
        //保存系统日志
        sysLogService.save(sysLogEntity);
        return result;
    }

}

Tome la anotación personalizada como punto de entrada, el parámetro es ProceedingJoinPointy sysLog, ProceedingJoinPointusado para obtener el método actualmente ejecutado, syslogusado para obtener el valor en la anotación.

Agregue un comentario sobre el método que necesita registrar el registro@SysLog(value)

@SysLog("修改角色")
@PutMapping
@PreAuthorize("@pms.hasPermission('sys:role:update')")
public ResponseEntity<Void> update(@RequestBody SysRole role){
    
    
    sysRoleService.updateRoleAndRoleMenu(role);
    return ResponseEntity.ok().build();
}

Cuando se opera este método, se registrará en la base de datos, y el contenido de la operación correspondiente se podrá ver en la gestión de registros.
img

Supongo que te gusta

Origin blog.csdn.net/lmsfv/article/details/106068588
Recomendado
Clasificación