mirror of
				https://github.com/continew-org/continew-starter.git
				synced 2025-11-04 09:01:40 +08:00 
			
		
		
		
	refactor(log): Log 注解新增 include、exclude 属性,用于扩展或减少日志包含信息
处理类上 Log 注解的日志包含信息 -> 处理方法上 Log 注解的日志包含信息
This commit is contained in:
		@@ -16,6 +16,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
package top.charles7c.continew.starter.log.common.annotation;
 | 
					package top.charles7c.continew.starter.log.common.annotation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import top.charles7c.continew.starter.log.common.enums.Include;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.lang.annotation.*;
 | 
					import java.lang.annotation.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -46,6 +48,16 @@ public @interface Log {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    String module() default "";
 | 
					    String module() default "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 包含信息(在全局配置基础上扩展包含信息)
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    Include[] include() default {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 排除信息(在全局配置基础上减少包含信息)
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    Include[] exclude() default {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 是否忽略日志记录(用于接口方法或类上)
 | 
					     * 是否忽略日志记录(用于接口方法或类上)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -83,18 +83,20 @@ public class LogInterceptor implements HandlerInterceptor {
 | 
				
			|||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        timestampTtl.remove();
 | 
					        timestampTtl.remove();
 | 
				
			||||||
        Set<Include> includeSet = logProperties.getInclude();
 | 
					 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
 | 
					            HandlerMethod handlerMethod = (HandlerMethod)handler;
 | 
				
			||||||
 | 
					            Log methodLog = handlerMethod.getMethodAnnotation(Log.class);
 | 
				
			||||||
 | 
					            Log classLog = handlerMethod.getBeanType().getDeclaredAnnotation(Log.class);
 | 
				
			||||||
 | 
					            Set<Include> includeSet = this.getIncludes(methodLog, classLog);
 | 
				
			||||||
            LogRecord finishedLogRecord = startedLogRecord.finish(new RecordableServletHttpResponse(response, response
 | 
					            LogRecord finishedLogRecord = startedLogRecord.finish(new RecordableServletHttpResponse(response, response
 | 
				
			||||||
                .getStatus()), includeSet);
 | 
					                .getStatus()), includeSet);
 | 
				
			||||||
            HandlerMethod handlerMethod = (HandlerMethod)handler;
 | 
					 | 
				
			||||||
            // 记录日志描述
 | 
					            // 记录日志描述
 | 
				
			||||||
            if (includeSet.contains(Include.DESCRIPTION)) {
 | 
					            if (includeSet.contains(Include.DESCRIPTION)) {
 | 
				
			||||||
                this.logDescription(finishedLogRecord, handlerMethod);
 | 
					                this.logDescription(finishedLogRecord, methodLog, handlerMethod);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            // 记录所属模块
 | 
					            // 记录所属模块
 | 
				
			||||||
            if (includeSet.contains(Include.MODULE)) {
 | 
					            if (includeSet.contains(Include.MODULE)) {
 | 
				
			||||||
                this.logModule(finishedLogRecord, handlerMethod);
 | 
					                this.logModule(finishedLogRecord, methodLog, classLog, handlerMethod);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (Boolean.TRUE.equals(logProperties.getIsPrint())) {
 | 
					            if (Boolean.TRUE.equals(logProperties.getIsPrint())) {
 | 
				
			||||||
                LogResponse logResponse = finishedLogRecord.getResponse();
 | 
					                LogResponse logResponse = finishedLogRecord.getResponse();
 | 
				
			||||||
@@ -107,15 +109,50 @@ public class LogInterceptor implements HandlerInterceptor {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 获取日志包含信息
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param methodLog 方法级 Log 注解
 | 
				
			||||||
 | 
					     * @param classLog  类级 Log 注解
 | 
				
			||||||
 | 
					     * @return 日志包含信息
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private Set<Include> getIncludes(Log methodLog, Log classLog) {
 | 
				
			||||||
 | 
					        Set<Include> includeSet = logProperties.getInclude();
 | 
				
			||||||
 | 
					        if (null != classLog) {
 | 
				
			||||||
 | 
					            this.processInclude(includeSet, classLog);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (null != methodLog) {
 | 
				
			||||||
 | 
					            this.processInclude(includeSet, methodLog);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return includeSet;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 处理日志包含信息
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param includes      日志包含信息
 | 
				
			||||||
 | 
					     * @param logAnnotation Log 注解
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private void processInclude(Set<Include> includes, Log logAnnotation) {
 | 
				
			||||||
 | 
					        Include[] includeArr = logAnnotation.include();
 | 
				
			||||||
 | 
					        if (includeArr.length > 0) {
 | 
				
			||||||
 | 
					            includes.addAll(Set.of(includeArr));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        Include[] excludeArr = logAnnotation.exclude();
 | 
				
			||||||
 | 
					        if (excludeArr.length > 0) {
 | 
				
			||||||
 | 
					            includes.removeAll(Set.of(excludeArr));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 记录描述
 | 
					     * 记录描述
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param logRecord     日志信息
 | 
					     * @param logRecord     日志信息
 | 
				
			||||||
 | 
					     * @param methodLog     方法级 Log 注解
 | 
				
			||||||
     * @param handlerMethod 处理器方法
 | 
					     * @param handlerMethod 处理器方法
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private void logDescription(LogRecord logRecord, HandlerMethod handlerMethod) {
 | 
					    private void logDescription(LogRecord logRecord, Log methodLog, HandlerMethod handlerMethod) {
 | 
				
			||||||
        // 例如:@Log("新增部门") -> 新增部门
 | 
					        // 例如:@Log("新增部门") -> 新增部门
 | 
				
			||||||
        Log methodLog = handlerMethod.getMethodAnnotation(Log.class);
 | 
					 | 
				
			||||||
        if (null != methodLog && StrUtil.isNotBlank(methodLog.value())) {
 | 
					        if (null != methodLog && StrUtil.isNotBlank(methodLog.value())) {
 | 
				
			||||||
            logRecord.setDescription(methodLog.value());
 | 
					            logRecord.setDescription(methodLog.value());
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
@@ -131,16 +168,16 @@ public class LogInterceptor implements HandlerInterceptor {
 | 
				
			|||||||
     * 记录模块
 | 
					     * 记录模块
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param logRecord     日志信息
 | 
					     * @param logRecord     日志信息
 | 
				
			||||||
 | 
					     * @param methodLog     方法级 Log 注解
 | 
				
			||||||
 | 
					     * @param classLog      类级 Log 注解
 | 
				
			||||||
     * @param handlerMethod 处理器方法
 | 
					     * @param handlerMethod 处理器方法
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private void logModule(LogRecord logRecord, HandlerMethod handlerMethod) {
 | 
					    private void logModule(LogRecord logRecord, Log methodLog, Log classLog, HandlerMethod handlerMethod) {
 | 
				
			||||||
        // 例如:@Log(module = "部门管理") -> 部门管理
 | 
					        // 例如:@Log(module = "部门管理") -> 部门管理
 | 
				
			||||||
        Log methodLog = handlerMethod.getMethodAnnotation(Log.class);
 | 
					 | 
				
			||||||
        if (null != methodLog && StrUtil.isNotBlank(methodLog.module())) {
 | 
					        if (null != methodLog && StrUtil.isNotBlank(methodLog.module())) {
 | 
				
			||||||
            logRecord.setModule(methodLog.module());
 | 
					            logRecord.setModule(methodLog.module());
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        Log classLog = handlerMethod.getBeanType().getDeclaredAnnotation(Log.class);
 | 
					 | 
				
			||||||
        if (null != classLog && StrUtil.isNotBlank(classLog.module())) {
 | 
					        if (null != classLog && StrUtil.isNotBlank(classLog.module())) {
 | 
				
			||||||
            logRecord.setModule(classLog.module());
 | 
					            logRecord.setModule(classLog.module());
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user