天天看點

springMVC記錄系統日志的幾種方式

在項目開發中往往需要記錄一些使用者操作的系統日志到資料庫,而不僅僅是記錄在檔案中或者log4j上。

     第一種是最簡單最原始也是最繁瑣最笨的辦法:即每個需要記錄的操作入口方法中去調用新增日志的接口。

     第二種是采用spring的攔截器進行方法攔截:

     建立一個攔截器:

<mvc:interceptor> 
           <mvc:mapping path="/**"/>
           <bean class="com.dw..interceptor.LogInterceptor"></bean>
        </mvc:interceptor>      

     建立一個攔截器的class繼承spring web的HandlerInterceptorAdapter類,在spring4中該類有四個方法可以進行重寫,如:

preHandle:它會在處理方法之前執行,可以用來做一些編碼處理、安全限制之類的操作。

postHandle:它是在方法執行後開始傳回前執行,可以進行日志記錄、修改ModelView之類的操作。

afterCompletion:最後執行,無論出錯與否都會執行這個方法,可以用來記錄異常資訊和一些必要的操作記錄。

afterConcurrentHandlingStarted:controller方法異步開始執行時就開始執行這個方法,而postHandle需要等到controller異步執行完成後再執行。

 需要注意的是spring的攔截器無法擷取處理函數的參數值。

    第三種就是采用spring的AOP配置注解進行攔截:

     首先在springAOP中的三個概念:advice、pointcut、advisor。

建立一個類,無需任何繼承和實作接口,隻需要在類上加入注解@Aspect。建立一個切入點的方法,注解@Pointcut,然後在建立一個方法,配置需

要通知的類型,通過JoinPoint相關類來擷取參數值和請求的内容。具體的切入點和通知類型的表達式需參考springAOP相關的表達式文法。然後

需要在配置檔案配置<aop:aspectj-autoproxy>,即aspectj動态代理。

    具體的日志記錄實作、可以采用比對請求位址的方法進行記錄(因為查詢操作可能不需要記錄),哪些需要記錄的請求可以通過配置檔案來配置,也可以通過注解來實作。

    或者是通過自定義注解來實作日志攔截,通過Pointcut攔截具體的注解而達到按需記錄日志的功能。

作者:少帥

繼續閱讀