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
- 日誌記錄有五種
- 前置通知
- 後置通知
- 異常通知
- 最終通知
- 環繞通知
- 下面是他們的例項。
- 知識點:
- 要想把一個類變成切面類,需要兩步,
① 在類上使用 @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
Springboot中AOP統一處理請求日誌
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
springboot中logback日誌常用配置,包含日誌切割
新增依賴: <!--監控--> <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
Springboot中Aspect實現切面(以記錄日誌為例)
前言今天我們來說說spring中的切面Aspect,這是Spring的一大優勢。面向切面程式設計往往讓我們的開發更加低耦合,也大大減少了程式碼量,同時呢讓我們更專注於業務模組的開發,把那些與業務無關的東西提取出去,便於後期的維護和迭代。 好了,廢話少說!我們直接步入正題 以系統日誌為例首先,我們先做一些準
Springboot 如何使用AOP同時織入多個切面?實現使用者 操作日誌記錄功能
首先匯入AOP的pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-sta
SpringBoot中AOP的配置
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配置和springboot中Logback配置
log4j 1. 導包 log4j下載地址 2. 配置檔案 預設配置檔案在src目錄下,個人感覺用properties還是比較爽的,在src下新建log4j.properties檔案 注:日誌級別 (debug < info < warn < e