AOP 切面編程------JoinPoint ---- log日誌

  AOP


 

  在軟件業,AOP爲Aspect Oriented Programming的縮寫,意爲:面向切面編程,經過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是OOP的延續,是軟件開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生範型。利用AOP能夠對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度下降,提升程序的可重用性,同時提升了開發的效率。java

  

  AOP核心概念


 

一、橫切關注點

  對哪些方法進行攔截,攔截後怎麼處理,這些關注點稱之爲橫切關注點web

二、切面(aspect)

  類是對物體特徵的抽象,切面就是對橫切關注點的抽象apache

三、鏈接點(joinpoint)

  被攔截到的點,由於Spring只支持方法類型的鏈接點,因此在Spring中鏈接點指的就是被攔截到的方法,實際上鍊接點還能夠是字段或者構造器編程

四、切入點(pointcut)

  對鏈接點進行攔截的定義api

五、通知(advice)

  所謂通知指的就是指攔截到鏈接點以後要執行的代碼,通知分爲前置、後置、異常、最終、環繞通知五類session

六、目標對象

  代理的目標對象多線程

七、織入(weave)

  將切面應用到目標對象並致使代理對象建立的過程app

八、引入(introduction)

  在不修改代碼的前提下,引入能夠在運行期爲類動態地添加一些方法或字段框架

 

  對joinpointjin進行log日誌的監控,攔截到controller ,service 等想要攔截的方法的日誌輸出 ,能夠輸出方法 名字與參數


 

   首先須要拿一個SSM的項目demo來測試,這個不會的先別看了函數式編程

項目的大體結構:

      

 第一步:配置log的Maven依賴


 

 

 第二步:配置log4j.properties,我是使用 properties文件的形式來配置的 還能夠.XML的形式設置 


 

簡單看一下properties其中一些配置的說明


 

1 輸出級別的種類

  • ERROR 爲嚴重錯誤 主要是程序的錯誤
  • WARN 爲通常警告,好比session丟失
  • INFO 爲通常要顯示的信息,好比登陸登出
  • DEBUG 爲程序的調試信息

2 配置日誌信息輸出目的地

log4j.appender.appenderName=??

  1. org.apache.log4j.ConsoleAppender(控制檯)
  2. org.apache.log4j.FileAppender(文件)
  3. org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件)
  4. org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
  5. org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

3 配置日誌信息的格式

log4j.appender.appenderName.layout = ??

  1. org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
  2. org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式)
  3. org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串)
  4. org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)

4 ConsoleAppender選項

Threshold=DEBUG:指定日誌消息的輸出最低層次。 
ImmediateFlush=true:默認值是true,意謂着全部的消息都會被當即輸出。 
Target=System.err:默認狀況下是System.out,指定輸出控制檯

5 FileAppender 選項

Threshold=DEBUG:指定日誌消息的輸出最低層次。 
ImmediateFlush=true:默認值是true,意謂着全部的消息都會被當即輸出。 
File=mylog.txt:指定消息輸出到mylog.txt文件。 
Append=false:默認值是true,即將消息增長到指定文件中,false指將消息覆蓋指定的文件內容。

6 RollingFileAppender 選項

Threshold=DEBUG:指定日誌消息的輸出最低層次。 
ImmediateFlush=true:默認值是true,意謂着全部的消息都會被當即輸出。 
File=mylog.txt:指定消息輸出到mylog.txt文件。 
Append=false:默認值是true,即將消息增長到指定文件中,false指將消息覆蓋指定的文件內容。 
MaxFileSize=100KB: 後綴能夠是KB, MB 或者是 GB. 在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。 
MaxBackupIndex=2:指定能夠產生的滾動文件的最大數。

7 日誌信息格式中幾個符號所表明的含義

-X號: X信息輸出時左對齊; 
%p: 輸出日誌信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL, 
%d: 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyy MMM dd HH:mm:ss,SSS},輸出相似:2002年10月18日 22:10:28,921 
%r: 輸出自應用啓動到輸出該log信息耗費的毫秒數 
%c: 輸出日誌信息所屬的類目,一般就是所在類的全名 
%t: 輸出產生該日誌事件的線程名 
%l: 輸出日誌事件的發生位置,至關於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.java:10) 
%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤爲用到像java servlets這樣的多客戶多線程的應用中。 
%%: 輸出一個」%」字符 
%F: 輸出日誌消息產生時所在的文件名稱 
%L: 輸出代碼中的行號 
%m: 輸出代碼中指定的消息,產生的日誌具體信息 
%n: 輸出一個回車換行符,Windows平臺爲」\r\n」,Unix平臺爲」\n」輸出日誌信息換行

 引用博客地址:http://blog.csdn.net/foreverling/article/details/51385128

 

第三步:在web.xml中配置log4j.properties


 

  第四步:引入aspectj的依賴


 

第五步:配置Spring-MVC.xml 的AOP配置


 

這裏只是簡單的列出controller的,service能夠在Spring層配置 這個想要知道爲何分開的能夠看我以前的一篇博客 關於二者的區別

第六步:寫一個類專門用於管理log輸出格式的 


能夠根據本身的喜愛和項目的需求設置

 

 

  JoinPoint 對象


 

JoinPoint對象封裝了SpringAop中切面方法的信息,在切面方法中添加JoinPoint參數,就能夠獲取到封裝了該方法信息的JoinPoint對象. 

    經常使用api:

方法名 功能
Signature getSignature(); 獲取封裝了署名信息的對象,在該對象中能夠獲取到目標方法名,所屬類的Class等信息
Object[] getArgs(); 獲取傳入目標方法的參數對象
Object getTarget(); 獲取被代理的對象
Object getThis(); 獲取代理對象

 

 OK這樣日誌的一套配置流程就這樣,還有其餘的形式不少,如註解形式,不少,本人初入來點小結,其實事物也能夠如此形式改造,同理

 

 

              【版本聲明】本文爲博主原創文章,轉載請註明出處

相關文章
相關標籤/搜索