欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot中通過AOP整合日志文件的實現(xiàn)

 更新時間:2021年12月28日 10:07:32   作者:小公羊  
本文主要介紹了SpringBoot中通過AOP整合日志文件的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

1.導(dǎo)入相關(guān)的依賴

<dependencies>
 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions> <!-- 去掉springboot自帶的日志,不然會沖突 -->
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
 
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
    </dependency>
    <!-- log4j-api -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
    </dependency>
    <!-- log4j-slf4j-impl -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
    </dependency>
    <!-- slf4j-api -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>
    <!-- slf4j-simple 解決沖突-->
    <!--<dependency>-->
        <!--<groupId>org.slf4j</groupId>-->
        <!--<artifactId>slf4j-simple</artifactId>-->
    <!--</dependency>-->
 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
</dependencies>

2.log4j2 日志文件

<?xml version="1.0" encoding="UTF-8"?>
<!--日志級別以及優(yōu)先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration 后面的 status 用于設(shè)置 log4j2 自身內(nèi)部的信息輸出,可以不設(shè)置,當(dāng)設(shè)置成 trace 時,可以看到 log4j2 內(nèi)部各種詳細(xì)輸出-->
<configuration status="INFO">
    <!--先定義所有的 appender-->
    <appenders>
        <!--輸出日志信息到控制臺-->
        <console name="Console" target="SYSTEM_OUT">
            <!--控制日志輸出的格式-->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </console>
    </appenders>
    <!--然后定義 logger,只有定義 logger 并引入的 appender,appender 才會生效-->
    <!--root:用于指定項目的根日志,如果沒有單獨指定 Logger,則會使用 root 作為默認(rèn)的日志輸出-->
    <loggers>
        <root level="info">
            <appender-ref ref="Console"/>
        </root>
    </loggers>
</configuration>

3.dao層的接口以及實現(xiàn)類

文件路徑:com.dzj.dao.Userdao.java

package com.dzj.dao;
 
public interface Userdao {
 
    void add();
 
    void update();
 
    void delete();
 
    void query();
}

文件路徑:com.dzj.dao.UserDaoImpl.java

package com.dzj.dao;
 
import org.springframework.stereotype.Service;
 
@Service
public class UserDaoImpl implements Userdao {
    @Override
    public void add() {
        System.out.println("執(zhí)行了添加方法...");
    }
 
    @Override
    public void update() {
 
        System.out.println("執(zhí)行了修改方法...");
    }
 
    @Override
    public void delete() {
 
        System.out.println("執(zhí)行了刪除方法...");
    }
 
    @Override
    public void query() {
 
        System.out.println("執(zhí)行了查找方法...");
    }
}

4.Service層業(yè)務(wù)實現(xiàn)類

文件路徑:com.dzj.service.UserService.java

package com.dzj.service;
 
import com.dzj.dao.UserDaoImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
@Service
public class UserService {
 
    @Autowired
    UserDaoImpl userDao;
 
    public void add(){
        userDao.add();
    }
    public void update(){
        userDao.update();
    }
    public void delete(){
        userDao.delete();
    }
    public void query(){
        userDao.query();
    }
}

5.Controller層接口控制類

文件路徑:com.dzj.controller.UserController.java

package com.dzj.controller;
 
import com.dzj.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
@Controller
@ResponseBody
public class UserController {
 
    @Autowired
    UserService userService;
 
    @RequestMapping("/test")
    public String userTest(){
 
        userService.add();
        return "chenggongle...";
    }
}

6.編寫業(yè)務(wù)類增強類,加入一個日志文件記錄

package com.dzj.advice;
 
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
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.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
 
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
 
@Component
@Aspect
public class AdviceMethod {
 
    private static final Logger log = LoggerFactory.getLogger(AdviceMethod.class);
 
    @Pointcut("execution(public * com.dzj.service.UserService.*(..))")
    public void webLog(){}
 
    @Before("webLog()")
    public void before(JoinPoint joinPoint){
 
        //這個RequestContextHolder是Springmvc提供來獲得請求的東西
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
 
        // 記錄下請求內(nèi)容
        log.info("################URL : " + request.getRequestURL().toString());//獲取請求的地址
        log.info("################HTTP_METHOD : " + request.getMethod());//獲取請求的方法
        log.info("################IP : " + request.getRemoteAddr());
        log.info("################THE ARGS OF THE CONTROLLER : " + Arrays.toString(joinPoint.getArgs()));
 
        /**
         * getSignature().getDeclaringTypeName()   是獲取包+類名的
         * joinPoint.getSignature.getName()  獲取了方法名
         * joinPoint.getTarget() 返回的是需要加強的目標(biāo)類的對象
         * joinPoint.getThis())  返回的是經(jīng)過加強后的代理類的對象
         */
        log.info("################CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
        log.info("################TARGET: " + joinPoint.getTarget());
        log.info("################THIS: " + joinPoint.getThis());
        System.out.println("方法執(zhí)行之前...");
    }
 
    @After("webLog()")
    public void after(){
        System.out.println("方法執(zhí)行之后...");
    }
}

7.運行測試,查看結(jié)果

啟動主啟動器類,在瀏覽器中輸入http://localhost:8080/test,查看控制臺輸出信息

到此這篇關(guān)于SpringBoot中通過AOP整合日志文件的實現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot AOP日志文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java基于ReadWriteLock實現(xiàn)鎖的應(yīng)用

    Java基于ReadWriteLock實現(xiàn)鎖的應(yīng)用

    這篇文章主要介紹了Java基于ReadWriteLock實現(xiàn)鎖的應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • MyBatis源碼剖析之Mapper代理方式詳解

    MyBatis源碼剖析之Mapper代理方式詳解

    這篇文章主要為大家詳細(xì)介紹了MyBatis中Mapper代理的方式,文中將通過源碼為大家進行詳細(xì)的剖析,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-07-07
  • mybatis分頁及模糊查詢功能實現(xiàn)

    mybatis分頁及模糊查詢功能實現(xiàn)

    這篇文章主要為大家詳細(xì)為大家詳細(xì)介紹了mybatis實現(xiàn)分頁及模糊查詢功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • SpringMVC中ModelAndView的使用及說明

    SpringMVC中ModelAndView的使用及說明

    這篇文章主要介紹了SpringMVC中ModelAndView的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • JAVA實現(xiàn)遍歷文件夾下的所有文件(遞歸調(diào)用和非遞歸調(diào)用)

    JAVA實現(xiàn)遍歷文件夾下的所有文件(遞歸調(diào)用和非遞歸調(diào)用)

    本篇文章主要介紹了JAVA 遍歷文件夾下的所有文件(遞歸調(diào)用和非遞歸調(diào)用) ,具有一定的參考價值,有興趣的可以了解一下。
    2017-01-01
  • 使用SpringBoot2.x配置靜態(tài)文件緩存

    使用SpringBoot2.x配置靜態(tài)文件緩存

    這篇文章主要介紹了使用SpringBoot2.x配置靜態(tài)文件緩存的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • MyBatis框架關(guān)聯(lián)映射實例詳解

    MyBatis框架關(guān)聯(lián)映射實例詳解

    這篇文章主要介紹了MyBatis框架關(guān)聯(lián)映射,關(guān)系映射主要處理復(fù)雜的SQl查詢,如子查詢,多表聯(lián)查等復(fù)雜查詢,應(yīng)用此種需求時可以考慮使用,需要的朋友可以參考下
    2022-11-11
  • SpringBoot淺析安全管理之Spring Security配置

    SpringBoot淺析安全管理之Spring Security配置

    安全管理是軟件系統(tǒng)必不可少的的功能。根據(jù)經(jīng)典的“墨菲定律”——凡是可能,總會發(fā)生。如果系統(tǒng)存在安全隱患,最終必然會出現(xiàn)問題,這篇文章主要介紹了SpringBoot安全管理Spring Security基本配置
    2022-08-08
  • Java如何實現(xiàn)圖像的卷積效果

    Java如何實現(xiàn)圖像的卷積效果

    這篇文章主要介紹了Java如何實現(xiàn)圖像的卷積效果問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • springboot為異步任務(wù)規(guī)劃自定義線程池的實現(xiàn)

    springboot為異步任務(wù)規(guī)劃自定義線程池的實現(xiàn)

    本文主要介紹了springboot為異步任務(wù)規(guī)劃自定義線程池,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06

最新評論