springboot利用@Aspect實(shí)現(xiàn)日志工具類的詳細(xì)代碼
一、導(dǎo)包
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.12</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>二、在啟動(dòng)類上進(jìn)行注解自動(dòng)掃描
@SpringBootApplication
@EnableCaching
@EnableAsync
@ComponentScan({"com.workorder.*"})
public class WorkOrderApplication {
public static void main(String[] args) {
SpringApplication.run(WorkOrderApplication.class, args);
}
}三、工具類
@Aspect
@Component
@Slf4j
public class LogAspect {
@Autowired
private Environment env;
@Pointcut("execution(public * com.workorder..controller..*.*(..))")
public void logPointCut()
{}
@Around("logPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
log.info("=========================================");
long beginTime = System.currentTimeMillis();
//執(zhí)行方法
Object result = point.proceed();
//執(zhí)行時(shí)長(毫秒)
long time = System.currentTimeMillis() - beginTime;
//保存日志
saveSysLog(point, time);
return result;
}
private void saveSysLog(ProceedingJoinPoint joinPoint, long time) {
// 接收到請(qǐng)求,記錄請(qǐng)求內(nèi)容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String logStr="";
if (isEnvironment("dev")){
String requestUrl = request.getRequestURL().toString() + "?";
//獲取所有參數(shù)方法
Enumeration<String> enu=request.getParameterNames();
while(enu.hasMoreElements()){
String paraName = enu.nextElement();
requestUrl+=paraName + "=" + request.getParameter(paraName) + "&";
}
logStr+="\r\n請(qǐng)求地址:"+ requestUrl.substring(0,requestUrl.length()-1);
}
//請(qǐng)求的參數(shù)
Object[] args = joinPoint.getArgs();
String params = JSONUtil.toJsonStr(args);
logStr+="\r\n請(qǐng)求方式:"+ request.getMethod();
logStr+="\r\n請(qǐng)求方法Token:"+ request.getHeader("token");
logStr+="\r\n請(qǐng)求參數(shù):"+ params;
logStr+="\r\nIP:"+ request.getRemoteAddr();
logStr+="\r\n響應(yīng)時(shí)間:"+ time+" ms";
log.info(logStr);
/**
* 判斷當(dāng)前是什么環(huán)境
* @param str
* @return
*/
private boolean isEnvironment(String str) {
boolean flag = false;
String[] arr = env.getActiveProfiles();
List<String> list = Arrays.asList(arr);
if (list.contains(str)) {
flag = true;
}
return flag;
}
}四、結(jié)果

到此這篇關(guān)于springboot利用@Aspect實(shí)現(xiàn)日志工具類的詳細(xì)代碼的文章就介紹到這了,更多相關(guān)springboot日志工具類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud如何使用Eureka實(shí)現(xiàn)服務(wù)之間的傳遞數(shù)據(jù)
這篇文章主要介紹了SpringCloud使用Eureka實(shí)現(xiàn)服務(wù)之間的傳遞數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Spring boot 跳轉(zhuǎn)到j(luò)sp頁面的實(shí)現(xiàn)方法
本篇文章主要介紹了Spring boot 跳轉(zhuǎn)到j(luò)sp頁面的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04
String.intern()作用與常量池關(guān)系示例解析
這篇文章主要為大家介紹了String.intern()作用與常量池關(guān)系示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
關(guān)于mybatis使用${}時(shí)sql注入的問題
這篇文章主要介紹了關(guān)于mybatis使用${}時(shí)sql注入的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Spring?Boot?集成Redisson實(shí)現(xiàn)分布式鎖詳細(xì)案例
這篇文章主要介紹了Spring?Boot?集成Redisson實(shí)現(xiàn)分布式鎖詳細(xì)案例,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08
spring框架下@value注解屬性static無法獲取值問題
這篇文章主要介紹了spring框架下@value注解屬性static無法獲取值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
利用spring aop實(shí)現(xiàn)動(dòng)態(tài)代理
這篇文章主要為大家詳細(xì)介紹了利用spring aop實(shí)現(xiàn)動(dòng)態(tài)代理的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
java解析dbf之通過javadbf包生成和讀取dbf文件
這篇文章主要介紹了java通過javadbf讀取和生成DBF文件的方法,大家參考使用吧2014-01-01

