1. 程式人生 > >用SpringBoot搭建個人部落格01-----使用AOP統一處理Web請求日誌

用SpringBoot搭建個人部落格01-----使用AOP統一處理Web請求日誌

摘要

AOP 是面向切面的程式設計,就是在執行期通過動態代理的方式對程式碼進行增強處理,比較核心的概念有 切點,切面,通知,有關AOP的詳情參考:。
本文要介紹的是在一個SpringBoot專案中如何統一的處理Web請求日誌,基本思想還是採用AOP的方式,攔截請求,然後,寫入日誌。

相關依賴

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

專案引入spring-boot-starter-web 依賴之後無需在引入相關的日誌依賴,因為spring-boot-starter-web中已經集成了slf4j 的依賴。
引入spring-boot-starter-aop 依賴之後,AOP 的功能即是啟動狀態,無需在新增@EnableAspectJAutoProxy註解。
在這裡插入圖片描述
在這裡插入圖片描述

定義系統日誌註解

/**
 * 系統日誌註解
 * Created by xiang.wei on 2018/10/17
 *
 * @author xiang.wei
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLog {
    String value() default "";
}

定義切面

@Aspect
@Component
public class SysLogAspect {
    private Logger logger = LoggerFactory.getLogger(SysLogAspect.class);
//    @Autowired
//    private MtoLogService mtoLogService;

    /**
     * 定義日誌切點
     */
    @Pointcut("@annotation(com.jay.common.annotation.SysLog)")
    public void logPointCut() {

    }

    /**
     * 環繞通知
     * @param point
     * @return
     */
    @Around("logPointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        long startTime = System.currentTimeMillis();
        Object proceed = point.proceed();
//        執行時長
        long time = System.currentTimeMillis() - startTime;
        saveSysLog(point, time);
        return proceed;
    }

    private void saveSysLog(ProceedingJoinPoint joinPoint, long time) {
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        MtoLog mtoLog = new MtoLog();
//      獲取註解內容
        SysLog annotation = method.getAnnotation(SysLog.class);
        if (annotation != null) {
            mtoLog.setOperation(annotation.value());
        }
//        獲取類名
        String className = joinPoint.getTarget().getClass().getName();
//        獲取方法名
        String methodName = method.getName();
        mtoLog.setMethod(className + "." + methodName + "()");
//       獲取引數
        Object[] args = joinPoint.getArgs();
        if (args != null) {
            String param = JSON.toJSONString(args[0]);
            mtoLog.setParams(param);
        }
        mtoLog.setTime(time);
        HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
        mtoLog.setIp(IpUtil.getIpAddr(request));

        mtoLog.setCreateDate(new Date());
        logger.info("請求的引數="+JSON.toJSONString(mtoLog));
//        mtoLogService.insert(mtoLog);
    }
}

使用

  @SysLog("登入介面")
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String login(String username,String password,
                        @RequestParam(value = "rememberMe", defaultValue = "0") int rememberMe,
                        ModelMap model) {
。。。。
}

執行效果:
在這裡插入圖片描述

參考部落格

程式碼地址

相關推薦

SpringBoot搭建個人部落01-----使用AOP統一處理Web請求日誌

摘要 AOP 是面向切面的程式設計,就是在執行期通過動態代理的方式對程式碼進行增強處理,比較核心的概念有 切點,切面,通知,有關AOP的詳情參考:。 本文要介紹的是在一個SpringBoot專案中如何統一的處理Web請求日誌,基本思想還是採用AOP的方式,攔截請

SpringBoot使用AOP統一處理Web請求日誌新增MDC

AOP是Spring框架中的一個重要內容,它通過對既有程式定義一個切入點,然後在其前後切入不同的執行內容,基於AOP不會破壞原來程式邏輯,因此它可以很好的對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率。之前看到公

Spring Boot中使用AOP統一處理Web請求日誌

在spring boot中,簡單幾步,使用spring AOP實現一個攔截器: 1、引入依賴: [html] view plain copy print?<dependency>    <groupId>org.springframework.boot</groupId&g

46. Spring Boot中使用AOP統一處理Web請求日誌【從零開始學Spring Boot】

【視訊&交流平臺】 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=40000000

記錄自己python搭建個人部落系統的完整過程(一)

零、前言 本博文記錄搭建個人部落格系統的完整過程,網上有許多相關的教程,但是沒找到一個(適合自己能力的)快速搭建的完整教程。藉此篇博文梳理一下前不久學習到的有關整個過程前前後後的各種知識點。 一、搭建環境 採用架構:python3.6 + django1.10 + ngi

Hexo搭建個人部落

一、安裝Nodejs 二、安裝Git for windows 三、安裝Hexo 1、開啟Git Bash,執行命令: npm install hexo-cli -g 如果不行就先執行: npm --registry http:

SpringBoot進階之AOP統一處理http請求日誌

相關注解 1、@Aspect  放在類上面,把該類作為一個切面 2、@Pointcut  放在方法上面,定義一個可被別的方法引用的切入點表示式 3、@Before  放在方法上面,前置通知   方法執行前執行 4、@After   放在方法上面     後置最終通知    

使用AOP同一處理WEB請求日誌

在實際開發中,我們可能會經常用到log.info(),這句程式碼會出現多次,使程式碼比較冗餘,通過aop原理可以幫助我們減少冗餘程式碼。 需要在pom檔案中引入aop的依賴: <!-- 引入aop依賴 --> <dependency> <groupId>

阿里雲+wordpress搭建個人部落網站【小白專的圖文教程】

  【宣告】   歡迎轉載,但請保留文章原始出處→_→   【正文】  在阿里雲上搭建使用個人部落格主要分為以下幾個步驟: 1、購買阿里雲ECS主機 2、購買域名 3、申請備案 4、環境配置 5、安裝wordpress 6、域名解析 宣告一下,本人對伺服器端的知識不是很熟悉,但

Github Page+Hexo輕鬆搭建個人部落

在2018年來臨之際,筆者拖延了一年多的部落格終於上線了,本文基於筆者的實踐經驗,即使你是一個技術小白,按照本文的步驟,也可以輕鬆搭建自己的部落格。 為什麼要搭建個人部落格? 總結和寫作能力很重要 獨立的才是自己的,所有文章都可永久儲存在自己的伺服器

GitHub和Hexo搭建個人部落

很久前就想利用GitHub來搭建一個個人部落格了,今天就琢磨了一下搭建方法,在這裡寫出來以供他人蔘考~ 一、簡介 Hexo: Hexo 是一款基於Node.js、快速、簡潔且高效的部落格框架,Hexo 使用 Markdown解析文章,在幾秒內,即可利用

【轉】阿里雲+wordpress搭建個人部落網站【小白專的圖文教程】

簡介 對於初次接觸雲伺服器的童鞋,想要搭建一個屬於自己的個人部落格是非常裝比的事情,那麼這裡有一個非常好的框架wordpress可以使用。 這裡主要分享一篇文章基於阿里雲伺服器以及WordPress從頭到尾搭建一個屬於自己的個人部落格 相信看完這篇博文

flask開發個人部落(28)—— 利用unittest進行單元測試

下面分析下這個webapp的單元測試模組test,請先看下目前test下的檔案結構:        目前__init__.py檔案還是空,請檢視test_basic.py的程式碼: import unittest from flask impor

使用 jekyll + github pages 搭建個人部落

1. 新建 github.io 專案 其實 github pages 有兩個用途,大家可以在官方網頁看到。其中一個是作為個人/組織的主頁(每個賬號只能有一個),另一個是作為 github 專案的專案主頁(每個專案可以有一個)。 而 github pages 本身就支援 jekyll

Django搭建個人部落:使用者的刪除

這一章將實現刪除使用者資料的功能。 許可權與檢視 刪除使用者資料本身的邏輯並不複雜,但是會涉及到新的問題。 使用者資料是很多網站最重要的財產,確保使用者資料的安全是非常重要的。 前面學習的使用者登入、退出、建立都是相對安全的操作;而刪除資料就很危險,弄不好會造成不可逆的損失。因此我們希望對操作者做一些

Django搭建個人部落:使用者的註冊

既然有登入登出,那麼使用者的註冊肯定也是少不了的。 登錄檔單類 使用者註冊時會用到表單來提交賬號、密碼等資料,所以需要寫註冊用的表單/userprofile/forms.py: /userprofile/forms.py ... # 註冊使用者表單 class UserRegisterForm(fo

Django搭建個人部落:重置使用者密碼

隨著技術的發展,驗證使用者身份的手段越來越多,指紋、面容、聲紋應有盡有,但密碼依然是最重要的手段。 網際網路處處都有密碼的身影,甚至變成了現代人的一種負擔。像筆者這樣的,動輒幾十個賬號密碼,忘記其中幾個簡直太正常了。 本章講如何幫助健忘症患者,重置使用者密碼。 安裝第三方庫 前面我們已經知道如何修改文

使用Hexo搭建個人部落,極速高效簡潔,新手小白可操作

目錄 只需要兩步 第一步程式碼部分: 第二部分放置程式碼 https://www.cnblogs.com/blogjun/articles/8289977.html 詳細操作可參考上文 這裡說一下大概的原理吧(純屬個人觀點,如有疑問請評論回去,接懟) 只需要兩步

使用Hexo+Github搭建個人部落

個人部落格:             技術部落格:http://messi1002.top/             閱讀部落格:http://www.read1002.t

centos6.8使用WordPress搭建個人部落

一、搭建LNMP 1.安裝Nginx 安裝Nginx [[email protected] ~]# yum -y install nginx Loaded plugins: fastestmirror Setting up Install Process Determ