1. 程式人生 > >SpringBoot 中的aop配置,完成日誌記錄功能

SpringBoot 中的aop配置,完成日誌記錄功能

第一步:在pom.xml下新增依賴

  • 因為springboot已經新增過日誌記錄功能的依賴
<!-- 核心模組,包括自動配置支援、日誌支援 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</
groupId
>
<artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </
dependency
>
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.4.0</version> </dependency>

不但需要日誌的依賴,還需要aop的依賴
在這裡插入圖片描述
在這裡插入圖片描述

第二步:在resources下新建logback.xml

在這裡插入圖片描述

  • 將下面的程式碼貼入檔案
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false"> <!--定義日誌檔案的儲存地址 勿在 LogBack 的配置中使用相對路徑,可以建立資料夾--> <property name="LOG_HOME" value="D:/projects/log" /> <!-- 控制檯輸出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!-- 按照每天生成日誌檔案 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日誌檔案輸出的檔名--> <FileNamePattern>${LOG_HOME}/springbootdemo.log.%d{yyyy-MM-dd}.log</FileNamePattern> <!--日誌檔案保留天數--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日誌檔案最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!--myibatis log configure,Myibatis的配置,會把他輸出的語句輸出出來--> <logger name="com.apache.ibatis" level="DEBUG"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/> <!-- 日誌輸出級別 trace<debug<info<warn<error<fatal 級別之間是包含的關係,意思是如果你設定日誌級別是trace,則大於等於這個級別的日誌都會輸出。 trace: 是追蹤,就是程式推進以下,你就可以寫個trace輸出,所以trace應該會特別多,不過沒關係,我們可以設定最低日誌級別不讓他輸出。 debug: 除錯麼,我一般就只用這個作為最低級別,trace壓根不用。是在沒辦法就用eclipse或者idea的debug功能就好了麼。 info: 輸出一下你感興趣的或者重要的資訊,這個用的最多了。 warn: 有些資訊不是錯誤資訊,但是也要給程式設計師的一些提示,類似於eclipse中程式碼的驗證不是有error 和warn(不算錯誤但是也請注意,比如以下depressed的方法)。 error: 錯誤資訊。用的也比較多。 fatal: 級別比較高了。重大錯誤,這種級別你可以直接停止程式了,是不應該出現的錯誤麼!不用那麼緊張,其實就是一個程度的問題。 --> <!--跟配置--> <root level="DEBUG"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> <!--日誌非同步到資料庫,需要有日誌表 --> <!--<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">--> <!--<!–日誌非同步到資料庫 –>--> <!--<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">--> <!--<!–連線池 –>--> <!--<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">--> <!--<driverClass>com.mysql.jdbc.Driver</driverClass>--> <!--<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>--> <!--<user>root</user>--> <!--<password>root</password>--> <!--</dataSource>--> <!--</connectionSource>--> <!--</appender>--> </configuration>

第四步:新建一個LogUtil

  • 日誌記錄有五種
  1. 前置通知
  2. 後置通知
  3. 異常通知
  4. 最終通知
  5. 環繞通知
  • 下面是他們的例項。
  • 知識點:
  • 要想把一個類變成切面類,需要兩步,
    ① 在類上使用 @Component 註解 把切面類加入到IOC容器中
    ② 在類上使用 @Aspect 註解 使之成為切面類

下面直接上完整程式碼,用@Aspect註解方式來實現前置通知、返回通知、後置通知、異常通知、環繞通知。
6. 註解不屬於三層架構使用,@Component//交給spring管理
7. 通過對映可以拿到這個切面(service)的所有屬性方法和
8. 切入點表示式@Pointcut(value = “execution(* com.aaa.sb.service..(…))”)

package com.aaa.sb.util;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * className:LogUtil
 * discription:通知類(切面的實現類)
 * author:luRuiHua
 * createTime:2018-11-23 18:02
 */
//不屬於三層架構
@Component//交給spring管理
@Aspect
public class LogUtil {

    //切入點配置//切入點表示式
    @Pointcut(value = "execution(* com.aaa.sb.service.*.*(..))")
    public void pointCutOne() {};
    /**
     * 前置通知
     */
    @Before(value = "pointCutOne()")//切入點指向切入點表示式
    public void beforeSaveLog(JoinPoint joinPoint) {
        //獲取目標物件
        String name = joinPoint.getTarget().getClass().getName();
        System.out.println("再呼叫"+name+"的"+"呼叫:" + joinPoint.getSignature().getName() + "方法之前,列印。。。");

    }
    /**
     * 後置通知
     */
    @AfterReturning(value = "pointCutOne()")//切入點指向切入點表示式
    public void afterReturningSavelog(JoinPoint joinPoint) {
        //獲取目標物件
        String name = joinPoint.getTarget().getClass().getName();
        System.out.println("再呼叫"+name+"的"+"呼叫:" + joinPoint.getSignature().getName() + "方法之前,列印。。。");
    }
    /**
     * 異常通知
     * 異常通知註解多了一個throwing = "exception"屬性,值和引數列表中的值必須一樣
     * 模擬時需要在service製造異常
     */
    @AfterThrowing(value = "pointCutOne()",throwing = "exception")//切入點指向切入點表示式
    public void afterThrowingSavelog(JoinPoint joinPoint,Exception exception) {
        //獲取目標物件
        String name = joinPoint.getTarget().getClass().getName();
        System.out.println("再呼叫"+name+"的"+"呼叫:" + joinPoint.getSignature().getName() + "方法之前,列印。。。方法時出現了"+exception.getClass().getName()+"異常,異常描述為:"+exception.getMessage());
    }
    /**
     * 最終通知
     */
    @After(value = "pointCutOne()")//切入點指向切入點表示式
    public void afterSavelog(JoinPoint joinPoint) {
        //獲取目標物件
        String name = joinPoint.getTarget().getClass().getName();
        System.out.println("再呼叫"+name+"的"+"呼叫:" + joinPoint.getSignature().getName() + "方法之後,無論有沒有異常都會列印。。。");
    }

    /**
     * 環繞通知
     * 引數和其他通知不同
     */
    @Around(value = "pointCutOne()")//切入點指向切入點表示式
    public Object aroundSavelog(ProceedingJoinPoint proceedingJoinPoint) {
        Object proceed = null;
        System.out.println(System.currentTimeMillis()+"執行業務之前。。。。。。。。");
        try {
            proceed = proceedingJoinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        System.out.println(System.currentTimeMillis()+"執行業務方法之後。。。。。。。");
        return proceed;
    }

}

相關推薦

SpringBoot aop配置完成日誌記錄功能

第一步:在pom.xml下新增依賴 因為springboot已經新增過日誌記錄功能的依賴 <!-- 核心模組,包括自動配置支援、日誌支援 --> <dependency> <groupId>org.s

SpringbootAOP統一處理請求日誌

alt image pri sys -1 boot 技術分享 ring com 完善上面的代碼: 現在把輸出信息由先前的system.out.println()方式改為由日誌輸出(日誌輸出的信息更全面) Springboot中AOP統一處理請求日誌

springboot—spring aop 實現系統操作日誌記錄存儲到數據庫

work prop 請求 pack spa 成功 方法 代碼 shu 原文:https://www.jianshu.com/p/d0bbdf1974bd 采用方案: 使用spring 的 aop 技術切到自定義註解上,針對不同註解標誌進行參數解析,記錄日誌

ssm框架整合AOP實現日誌記錄功能

在ssm框架中,實現一個切面日誌功能,起碼要掌握的知識有四點: 以下是自己之前做的一個專案,希望對你們有幫助 1:先定義一個自定義註解類 @Target({METHOD, TYPE}) @Retention(RetentionPolicy.RUNTIME) @In

spring aop 實現使用者操作日誌記錄功能

首先寫好一個工具類 LogAspect.java package com.yangjf.commons; import java.lang.reflect.Method; import java.util.Date; import org.aspectj.lang.Join

SpringBoot分散式管理新增日誌記錄註解配置與EhCache使用

    首先看下專案結構: 首先看下pom.xml配置的jar包:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins

springbootlogback日誌常用配置包含日誌切割

新增依賴: <!--監控--> <dependency> <groupId>org.springframework.boot</groupId>

springboot AOP全局攔截日誌記錄

quest com info throws ret https log element aspect @Aspect@Component@Slf4jpublic class WebLogAspect { @Pointcut("execution(public * co

SpringbootAspect實現切面(以記錄日誌為例)

前言今天我們來說說spring中的切面Aspect,這是Spring的一大優勢。面向切面程式設計往往讓我們的開發更加低耦合,也大大減少了程式碼量,同時呢讓我們更專注於業務模組的開發,把那些與業務無關的東西提取出去,便於後期的維護和迭代。 好了,廢話少說!我們直接步入正題 以系統日誌為例首先,我們先做一些準

Springboot 如何使用AOP同時織入多個切面?實現使用者 操作日誌記錄功能

首先匯入AOP的pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-sta

SpringBootAOP配置

AOP目的: 面向切面程式設計(aspect-oriented programming,AOP)主要實現的目的是針對業務處理過程中的切面進行提取,諸如日誌、事務管理和安全這樣的系統服務,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發

2 Springboot使用redis配置redis的key value生成策略

上一篇裡講過了redis在spring boot中的簡單使用,對於單個物件的增刪改查的預設操作。 下面來看一下在redis中,這些快取的資料是如何儲存的,為了便於後面的快取的key的可讀性,先修改一下cache的key。 @CacheConfig(cacheNames =

Log日誌級別在SpringBoot配置

    在使用Spring Boot進行專案開發的過程中,為了對日誌進行更友好的處理,所以需要預設的日誌進行自定義的配置工作,關於日誌的列印情況,還是先了解一下日誌的級別吧;    在網上索羅了一下,介

c語言每隔1秒向檔案寫入一行記錄類似日誌記錄

讀寫一個檔案test.txt,每隔1秒向檔案中寫入一行記錄,直到按Ctrl-C終止。下次啟動程式時在test.txt檔案末尾追加記錄,並且序號能夠接續上次的序號。 #include <stdio

kafka+windows+java+springboot配置

compiler expired acc color log4j2 get 臺電腦 dep 關閉 1.百度kafka+zookeeper+windows配置 1.1 zookeeper配置 dataDir=/tmp/zookeeper # the port at whi

SpringBoot配置文件的優先級及加載順序

cloud str 重寫 加載順序 () 微服務 system efault ron 我們在寫程序的時候會碰到各種環境(開發、測試、生產),因而,在我們切換環境的時候,我們需要手工切換配置文件的內容。這大大的加大了運維人員的負擔,同時會帶來一定的安全隱患。 為此,為了能更合

centos安裝配置nginx完成之後主機無法訪問

CP 方法 true VM 配置 pre PE all 開啟 原因 VMware中安裝centos7,安裝配置完成nginx後,主機無法訪問。虛擬機沒有放行Nginx默認端口80。 解決方法 解決方法 首先:開啟 web 端口 firewall-cmd --p

mybatis:在springboot配置

-m 添加 part -exec simple ase conf boot 關聯對象 ## Mybatis 配置 mybatis.type-aliases-package=com.xfind.core.entity.xianyu mybatis.mapper-locatio

MV3D環境配置解決安裝python shapely時缺少 geos庫的問題

href image nag ins watermark python -o follow 生成 MV3D 環境配置需要安裝 shapely庫在pip install shapely 的時候報錯 發現沒有geos庫 先安裝VS 2013 然後出現打開CMD下載 geos庫下

log4j配置springbootLogback配置

log4j 1. 導包 log4j下載地址 2. 配置檔案 預設配置檔案在src目錄下,個人感覺用properties還是比較爽的,在src下新建log4j.properties檔案 注:日誌級別 (debug < info < warn < e