日志模塊自定義@SkipLogAspect注解跳過(guò)切面的操作方法
1.增加原因
因?yàn)槿绻麉?shù)是一些大對(duì)象,比如HttpServletRequest request,在轉(zhuǎn)化為json的時(shí)候就會(huì)導(dǎo)致OOM,所以選擇新增一個(gè)注解讓用戶自己靈活的決定是否添加日志切面
2.common-log4j2-starter
1.目錄結(jié)構(gòu)

2.SkipLogAspect.java 自定義注解
package cn.sunxiansheng.log4j2.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Description: 跳過(guò)日志切面的注解
*
* @Author sun
* @Create 2025/1/24 18:08
* @Version 1.0
*/
@Target({ElementType.METHOD, ElementType.TYPE}) // 可以標(biāo)注在類或方法上
@Retention(RetentionPolicy.RUNTIME) // 運(yùn)行時(shí)生效
public @interface SkipLogAspect {
}3.LogAspect.java
1.核心改動(dòng)

2.完整代碼
package cn.sunxiansheng.log4j2.aspectj;
import cn.sunxiansheng.log4j2.annotation.SkipLogAspect;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import java.lang.reflect.Method;
/**
* 日志切面
*
* @author sunxiansheng
*/
@Aspect
@Slf4j
public class LogAspect {
private static final Gson GSON = new GsonBuilder()
.setPrettyPrinting()
.disableHtmlEscaping()
.create();
private static final String ANSI_RESET = "\u001B[0m";
private static final String ANSI_CYAN = "\u001B[92m";
@Pointcut("execution(public * *..controller..*(..)) || " +
"execution(public * *..service..*(..))")
public void applicationPackagePointcut() {
// 切點(diǎn)定義
}
@Around("applicationPackagePointcut()")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
// 獲取目標(biāo)類和方法
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
Class<?> targetClass = joinPoint.getTarget().getClass();
// 檢查是否存在 @SkipLogAspect 注解
if (method.isAnnotationPresent(SkipLogAspect.class) ||
targetClass.isAnnotationPresent(SkipLogAspect.class)) {
// 直接執(zhí)行目標(biāo)方法,不記錄日志
return joinPoint.proceed();
}
// 正常記錄日志邏輯
String className = signature.getDeclaringTypeName();
String methodName = signature.getName();
Object[] args = joinPoint.getArgs();
String requestParams = GSON.toJson(args);
log.info("==> 進(jìn)入方法: {}.{}()", className, methodName);
log.info("參數(shù):\n" + ANSI_CYAN + "{}" + ANSI_RESET, requestParams);
long startTime = System.currentTimeMillis();
Object result = joinPoint.proceed();
long endTime = System.currentTimeMillis();
String response = GSON.toJson(result);
log.info("<== 退出方法: {}.{}() | 耗時(shí): {} ms", className, methodName, endTime - startTime);
log.info("返回值:\n" + ANSI_CYAN + "{}" + ANSI_RESET, response);
return result;
}
}3.common-log4j2-starter-demo
1.目錄結(jié)構(gòu)

2.TraceController.java 新增方法,測(cè)試跳過(guò)日志切面的注解
/**
* 測(cè)試跳過(guò)日志切面的注解
*
* @param msg
* @return
*/
@SkipLogAspect
@RequestMapping("/skipLogAspect")
public String skipLogAspect(String msg) {
return "skip log aspect";
}3.測(cè)試




到此這篇關(guān)于日志模塊自定義@SkipLogAspect注解跳過(guò)切面的文章就介紹到這了,更多相關(guān)日志模塊自定義@SkipLogAspect注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea配置springboot熱部署終極解決辦法(解決熱部署失效問(wèn)題)
這篇文章主要介紹了idea配置springboot熱部署終極解決辦法(解決熱部署失效問(wèn)題),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-07-07
Springboot實(shí)現(xiàn)發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了Springboot實(shí)現(xiàn)發(fā)送郵件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Java Spring Controller 獲取請(qǐng)求參數(shù)的幾種方法詳解
這篇文章主要介紹了Java Spring Controller 獲取請(qǐng)求參數(shù)的幾種方法詳解的相關(guān)資料,這里提供了6種方法,需要的朋友可以參考下2016-12-12
Spring?myBatis數(shù)據(jù)庫(kù)連接異常問(wèn)題及解決
這篇文章主要介紹了Spring?myBatis數(shù)據(jù)庫(kù)連接異常問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
Java cglib為實(shí)體類(javabean)動(dòng)態(tài)添加屬性方式
這篇文章主要介紹了Java cglib為實(shí)體類(javabean)動(dòng)態(tài)添加屬性方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Java導(dǎo)入新項(xiàng)目報(bào)錯(cuò)java:JDK?isn‘t?specified?for?module解決辦法
這篇文章主要給大家介紹了關(guān)于Java導(dǎo)入新項(xiàng)目報(bào)錯(cuò)java:JDK?isn‘t?specified?for?module的解決辦法,當(dāng)您在導(dǎo)入Java項(xiàng)目時(shí)遇到錯(cuò)誤時(shí),可以嘗試以下面的方法來(lái)處理,需要的朋友可以參考下2024-05-05

