日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

SpringBoot集成AOP管理日志

發布時間:2023/11/28 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot集成AOP管理日志 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面

如何將所有的通過url的請求參數以及返回結果都輸出到日志中?

如果在controller的類中每個方法名都寫一個log輸出肯定是不明智的選擇。使用Spring的AOP功能即可完成。

AOP 是 Aspect Oriented Program (面向切面)的編程的縮寫。他是和面向對象編程相對的一個概念。在面向對象的編程中,我們傾向于采用封裝、繼承、多態等概念,將一個個的功能在對象中來實現。但是,我們在實際情況中也發現,會有另外一種需求就是一類功能在很多對象的很多方法中都有需要。例如有一些對數據庫訪問的方法有事務管理的需求,有很多方法中要求打印日志。按照面向對象的方式,那么這些相同的功能要在很多地方來實現或者在很多地方來調用。這就非常繁瑣并且和這些和業務不相關的需求耦合太緊密了。所以后來就出現了面向切面的編程來解決這一類問題,并對面向對象的編程做了很好的補充

代碼實現

1、在pom.xml中添加aspect依賴包。

 <!-- aop --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

2、添加WebLogAspect類。

package com.fit.aop;import java.util.Enumeration;import javax.servlet.http.HttpServletRequest;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;@Aspect
@Component
public class WebLogAspect {private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);@Pointcut("execution(public * com.fit.controller.*.*(..))")public void webLog() {}/*** 使用AOP前置通知攔截請求參數信息*/@Before("webLog()")public void doBefore(JoinPoint joinPoint) throws Throwable {ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();logger.info("URL : " + request.getRequestURL().toString());logger.info("HTTP_METHOD : " + request.getMethod());logger.info("IP : " + request.getRemoteAddr());Enumeration<String> enu = request.getParameterNames();while (enu.hasMoreElements()) {String name = (String) enu.nextElement();logger.info("name:{},value:{}", name, request.getParameter(name));}}/*** 后置通知 * @param ret* @throws Throwable*/@AfterReturning(returning = "ret", pointcut = "webLog()")public void doAfterReturning(Object ret) throws Throwable {// 處理完請求,返回內容logger.info("RESPONSE : " + ret);}
}

3、UserController測試類

package com.fit.controller;import java.util.HashMap;
import java.util.Map;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class UserController {@ResponseBody@RequestMapping(value = "getUser")public Map<String, Object> getUser() {Map<String, Object> user = new HashMap<String, Object>();user.put("name", "zlzhaoe");user.put("age", "21");return user;}
}

4、SpringBoot啟動類

package com.fit;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class App {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubSpringApplication.run(App.class, args);}
}

5、啟動App,訪問http://localhost:8080/getUser,日志打印如下:

總結

以上是生活随笔為你收集整理的SpringBoot集成AOP管理日志的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。