1:ログエンティティクラス
public class syslog { / *** / private integer id; / **ログ説明*/プライベート文字列の説明; / **実行方法*/プライベート文字列メソッド。 /**ログタイプ0:操作ログ。 1:例外ログ*/ private integer logtype; / **クライアントが要求したIPアドレス*/ private文字列requestIP; / **例外コード*/プライベート文字列例外コード。 / **例外の詳細*/プライベート文字列例外デテール。 / **パラメーターを要求*/ private文字列パラメーション。 / **オペレーター*/プライベート文字列createby; / **操作時間*/ private string recutedate; public Integer getId(){return id; } public void setid(integer id){this.id = id; } public string getDescription(){return description; } public void setDescription(string description){this.description = description; } public string getMethod(){return method; } public void setMethod(string method){this.method = method; } public Integer getLogtype(){return logType; } public void setLogtype(integer logtype){this.logtype = logtype; } public string getRequestip(){return requestip; } public void setRequestip(string requestip){this.requestip = requestip; } public string getExceptionCode(){return ExceptionCode; } public void setExceptionCode(String ExceptionCode){this.exceptionCode = exceptionCode; } public string getExceptionDetail(){return ExceptionDetail; } public void setExceptionDetail(String ExceptionDetail){this.exceptionDetail = ExceptionDetail; } public string getParams(){return params; } public void setparams(string params){this.params = params; } public string getCreateby(){return createby; } public void setcreateby(string createby){this.createby = createby; } public string getCreateDate(){return createdate; } public void setCreateDate(string recutedate){this.createdate = createdate; }}2:Mavenが必要とする瓶
<Dependency> groupId> org.aspectj </groupid> <artifactid> aspectjrt </artifactid> <version> 1.7.4 </version> </dependency> <dependency> groupid> org.aspectj </groupId> <artifactid> aspectjweaver </artifactid> <GroupId> cglib </groupid> <artifactid> cglib </artifactid> <bersion> 2.1_3 </version> </dependency> <dependency> <groupid> org.springframework </groupid> <artifactid> spring-aop </artifactid> <バージョン>
このプロジェクトは、JDK1.7を使用する必要があります
3:Springservlet-Mvc.xml
<!-Proxy-target-class = "true" cglib proxyの使用を強制します。 falseの場合、Springは自動的に選択されます - > <aop:saspej-autopproxy proxy-target-class = "true"/>
Proxy-Target-Class = "True"を追加することは、コントローラーのメソッドを傍受することです。
4:セクションを定義します、私は主に事前通知と例外通知をここに書きます
以下はカスタムアノテーションです
Java.lang.Annotation。*; @target({elementType.Parameter、elementType.Method})@retention(RetentionPolicy.runtime)@documented public @interface log {/ **実行される操作の種類など、次のような操作の追加**/ public String operationType()デフォルト "; / **(ユーザーの追加**/ public String operationName()default "";}など、実行される特定の操作が実行されるべき操作が行われます。フェイスカット
Import java.lang.Reflect.Method; Import java.text.simpledateformat; Import java.util.arrays; Import java.util.date; Import javax.annotation.resource; Import javax.servlet.http.httpservletrequest; javax.servax.servax.servax.servax.servax.servax.servax.servax.servax.servax.servax.servax.servax.servax.servax.servax.servax.servax.servax.servax.servax. org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Around;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 springframework.web.context.request.requestcontextholder; Import org.springframework.web.context.request.Request.servletrequestattributes; Import com.gtcity.user.model.syslog; Import com.gtcity.user.user.user.user.sysur com.gtcity.user.service.syslogservice;/** * @author panliang * @version creation time:2017-3-31 * @desc point-cut class * */ @componentpublic class systemlogaspect {//データベース@Resource private syslogservice Systemserviceへのログを保存するprivate static final logger logger = loggerFactory.getLogger(SystemLogaspect。Class); //コントローラーレイヤータンジェントポイント//最初の *はすべての返品値タイプを表します@pointcut( "execution(* com.gtcity.web.controller ..*。*(..)")public void controlleraspect(){} /***************************** @31 2:22:16 PM* @Param JoinPoint-Cut @before( "controlleraspect()")public void dobefore(joinpoint joinpoint){/* system.out.println( "=================================================================== System.out.info( " + joinpoint); session.gettribute(user == null){new sysuser(); Joinpoint.getSignature(); method.getParameTypes(); System.out.println( "================================================== system.out.println( " + operationname.out.println(" + user.getusername()); log.setDescription(getPoint.getClass()。 " + getSignature()。 log.setexception.setcreateby(null); System.out.println( "======= ======"); 2017-3-31 2:24:36 PM * @Param JoinPoint Point-Cut * @description:例外通知は、例外log */ @afterthrowing(@afterReraspect() "、throwing =" e ")の傍受と記録に使用されます。 Requestextholder.getRequest.getSession(); ip = request.getRemoteaddr(); Joinpoint.getSignature(); method.getParametypes(); System.out.println( "==============例外通知Start ==================================================================================================================== ===================================================================================== ===================================================================================== ===================================================================================== System.out.println( "例外情報:" + e.getmessage()); system.out.println( " + user.getusername()); out.println(" + ip); log.setDescription(e.getClass() "()); System.out.println( "============================= log ============== "例外メソッド:{}例外コード:{}例外情報:{}パラメーター:{}"、getname()。5:コントローラー内
/** *ユーザー名に基づいてパスワードを見つけて、ユーザー名とパスワードが正しいかどうかを判断します * @author panliang * @param request * @param response * @throws ioexception */ @requestmapping( "/skippage.do") @log(operationType = "選択操作:"、operationname = "ユーザーlogin")// skippage(httpservletrequest request、httpservletresponse応答)throws ioexception {modelandview result = null; string username = request.getParameter( "email"); string password = request.getParameter( "password"); int flag = sysuserservice.login(requents extername、flag、flag、flag、flag); ModelandView( "Redirect:/login/dispacher_main.do");} else if(flag == 2){// usernameが存在しない結果= new modelect:/login/login.do?errorcode = 1 ");} ModelandView( "Redirect:/login/login.do?errorcode = 2");} return result;}他の3つの通知について知りたい人については、このブログ投稿を参照してください:クリックしてリンクを開きます
このようにして、ユーザーが背景にアクセスすると、通常のアクセスデータベースであろうとバグデータベースであろうと、レコードが表示されます。
グローバルログ管理を実装する上記のAOPアノテーション方法は、私があなたと共有したすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。