springMvc记录日志的几种方法 web开发使用spring MVC怎么对用户操作行为进行记录...

springmvc\u600e\u4e48\u914d\u7f6e\u65e5\u5fd7\u8bb0\u5f55

\u5728\u9879\u76ee\u5f00\u53d1\u4e2d\u5f80\u5f80\u9700\u8981\u8bb0\u5f55\u4e00\u4e9b\u7528\u6237\u64cd\u4f5c\u7684\u7cfb\u7edf\u65e5\u5fd7\u5230\u6570\u636e\u5e93\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u8bb0\u5f55\u5728\u6587\u4ef6\u4e2d\u6216\u8005log4j\u4e0a\u3002
\u7b2c\u4e00\u79cd\u662f\u6700\u7b80\u5355\u6700\u539f\u59cb\u4e5f\u662f\u6700\u7e41\u7410\u6700\u7b28\u7684\u529e\u6cd5\uff1a\u5373\u6bcf\u4e2a\u9700\u8981\u8bb0\u5f55\u7684\u64cd\u4f5c\u5165\u53e3\u65b9\u6cd5\u4e2d\u53bb\u8c03\u7528\u65b0\u589e\u65e5\u5fd7\u7684\u63a5\u53e3\u3002
\u7b2c\u4e8c\u79cd\u662f\u91c7\u7528spring\u7684\u62e6\u622a\u5668\u8fdb\u884c\u65b9\u6cd5\u62e6\u622a\uff1a
\u5efa\u7acb\u4e00\u4e2a\u62e6\u622a\u5668\uff1a




\u65b0\u5efa\u4e00\u4e2a\u62e6\u622a\u5668\u7684class\u7ee7\u627fspring web\u7684HandlerInterceptorAdapter\u7c7b\uff0c\u5728spring4\u4e2d\u8be5\u7c7b\u6709\u56db\u4e2a\u65b9\u6cd5\u53ef\u4ee5\u8fdb\u884c\u91cd\u5199\uff0c\u5982\uff1a
preHandle\uff1a\u5b83\u4f1a\u5728\u5904\u7406\u65b9\u6cd5\u4e4b\u524d\u6267\u884c\uff0c\u53ef\u4ee5\u7528\u6765\u505a\u4e00\u4e9b\u7f16\u7801\u5904\u7406\u3001\u5b89\u5168\u9650\u5236\u4e4b\u7c7b\u7684\u64cd\u4f5c\u3002
postHandle\uff1a\u5b83\u662f\u5728\u65b9\u6cd5\u6267\u884c\u540e\u5f00\u59cb\u8fd4\u56de\u524d\u6267\u884c\uff0c\u53ef\u4ee5\u8fdb\u884c\u65e5\u5fd7\u8bb0\u5f55\u3001\u4fee\u6539ModelView\u4e4b\u7c7b\u7684\u64cd\u4f5c\u3002
afterCompletion\uff1a\u6700\u540e\u6267\u884c\uff0c\u65e0\u8bba\u51fa\u9519\u4e0e\u5426\u90fd\u4f1a\u6267\u884c\u8fd9\u4e2a\u65b9\u6cd5\uff0c\u53ef\u4ee5\u7528\u6765\u8bb0\u5f55\u5f02\u5e38\u4fe1\u606f\u548c\u4e00\u4e9b\u5fc5\u8981\u7684\u64cd\u4f5c\u8bb0\u5f55\u3002
afterConcurrentHandlingStarted\uff1acontroller\u65b9\u6cd5\u5f02\u6b65\u5f00\u59cb\u6267\u884c\u65f6\u5c31\u5f00\u59cb\u6267\u884c\u8fd9\u4e2a\u65b9\u6cd5\uff0c\u800cpostHandle\u9700\u8981\u7b49\u5230controller\u5f02\u6b65\u6267\u884c\u5b8c\u6210\u540e\u518d\u6267\u884c\u3002
\u9700\u8981\u6ce8\u610f\u7684\u662fspring\u7684\u62e6\u622a\u5668\u65e0\u6cd5\u83b7\u53d6\u5904\u7406\u51fd\u6570\u7684\u53c2\u6570\u503c\u3002
\u7b2c\u4e09\u79cd\u5c31\u662f\u91c7\u7528spring\u7684AOP\u914d\u7f6e\u6ce8\u89e3\u8fdb\u884c\u62e6\u622a\uff1a
\u9996\u5148\u5728springAOP\u4e2d\u7684\u4e09\u4e2a\u6982\u5ff5\uff1aadvice\u3001pointcut\u3001advisor\u3002
\u65b0\u5efa\u4e00\u4e2a\u7c7b\uff0c\u65e0\u9700\u4efb\u4f55\u7ee7\u627f\u548c\u5b9e\u73b0\u63a5\u53e3\uff0c\u53ea\u9700\u8981\u5728\u7c7b\u4e0a\u52a0\u5165\u6ce8\u89e3@Aspect\u3002\u521b\u5efa\u4e00\u4e2a\u5207\u5165\u70b9\u7684\u65b9\u6cd5\uff0c\u6ce8\u89e3@Pointcut\uff0c\u7136\u540e\u5728\u521b\u5efa\u4e00\u4e2a\u65b9\u6cd5\uff0c\u914d\u7f6e\u9700 \u8981\u901a\u77e5\u7684\u7c7b\u578b\uff0c\u901a\u8fc7JoinPoint\u76f8\u5173\u7c7b\u6765\u83b7\u53d6\u53c2\u6570\u503c\u548c\u8bf7\u6c42\u7684\u5185\u5bb9\u3002\u5177\u4f53\u7684\u5207\u5165\u70b9\u548c\u901a\u77e5\u7c7b\u578b\u7684\u8868\u8fbe\u5f0f\u9700\u53c2\u8003springAOP\u76f8\u5173\u7684\u8868\u8fbe\u5f0f\u8bed\u6cd5\u3002\u7136\u540e \u9700\u8981\u5728\u914d\u7f6e\u6587\u4ef6\u914d\u7f6e\uff0c\u5373aspectj\u52a8\u6001\u4ee3\u7406\u3002
\u5177\u4f53\u7684\u65e5\u5fd7\u8bb0\u5f55\u5b9e\u73b0\u3001\u53ef\u4ee5\u91c7\u7528\u5339\u914d\u8bf7\u6c42\u5730\u5740\u7684\u65b9\u6cd5\u8fdb\u884c\u8bb0\u5f55(\u56e0\u4e3a\u67e5\u8be2\u64cd\u4f5c\u53ef\u80fd\u4e0d\u9700\u8981\u8bb0\u5f55),\u54ea\u4e9b\u9700\u8981\u8bb0\u5f55\u7684\u8bf7\u6c42\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u6587\u4ef6\u6765\u914d\u7f6e\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u6ce8\u89e3\u6765\u5b9e\u73b0\u3002
\u6216\u8005\u662f\u901a\u8fc7\u81ea\u5b9a\u4e49\u6ce8\u89e3\u6765\u5b9e\u73b0\u65e5\u5fd7\u62e6\u622a\uff0c\u901a\u8fc7Pointcut\u62e6\u622a\u5177\u4f53\u7684\u6ce8\u89e3\u800c\u8fbe\u5230\u6309\u9700\u8bb0\u5f55\u65e5\u5fd7\u7684\u529f\u80fd\u3002

\u8b6c\u5982\u6253\u5370\u4e8c\u7ef4\u7801\u6a21\u5757\uff1alog.debug("qrcode: userid=" + userid);

第一种是最简单最原始也是最繁琐最笨的办法:即每个需要记录的操作入口方法中去调用新增日志的接口。

第二种是采用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拦截具体的注解而达到按需记录日志的功能。

  • springMvc璁板綍鏃ュ織鐨勫嚑绉嶆柟娉
    绛旓細绗竴绉嶆槸鏈绠鍗曟渶鍘熷涔熸槸鏈绻佺悙鏈绗ㄧ殑鍔炴硶锛氬嵆姣忎釜闇瑕璁板綍鐨勬搷浣滃叆鍙f柟娉曚腑鍘昏皟鐢ㄦ柊澧鏃ュ織鐨鎺ュ彛銆傜浜岀鏄噰鐢spring鐨勬嫤鎴櫒杩涜鏂规硶鎷︽埅锛氬缓绔嬩竴涓嫤鎴櫒锛<mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.dw..interceptor.LogInterceptor"></bean> </mvc:interceptor> 鏂板缓涓涓...
  • springmvc涓嬬殑鏃ュ織閰嶇疆
    绛旓細寮鍙戝骞,spring鐨鏃ュ織閰嶇疆鎴戦兘鏄鍒朵簡鍒汉鐨勯厤缃紝浠庢湭鐔熸倝銆傛渶杩戞⒊鐞嗕簡涓娆°傜壒鐣欎竴浠璁板綍銆備釜浜虹數鑴戞槸mac java鏄1.8 浣跨敤idea寮鍙戙傛棩蹇楄繖鍧椾娇鐢ㄤ簡lombok鎻掍欢銆傞渶瑕佽嚜宸卞畨瑁呫備緥濡傚涓嬮厤缃皢浼氭墦鍗2娆℃棩蹇 鍒犻櫎鍏朵腑涓涓猻tdout鍗冲彲鎭㈠姝e父銆傚垵鏈熸垜鎷疯礉浜嗗埆浜虹殑閰嶇疆锛鏃ュ織鐨閰嶇疆鏀惧湪src/main/resources/conf...
  • log4j鎬庝箞鍦springmvc涓娇鐢
    绛旓細缁煎悎浣跨敤杩欎笁涓粍浠跺彲浠ヨ交鏉惧湴璁板綍淇℃伅鐨勭被鍨嬪拰绾у埆,骞跺彲浠ュ湪杩愯鏃舵帶鍒鏃ュ織杈撳嚭鐨勬牱寮忓拰浣嶇疆銆 1銆丩oggers Loggers缁勪欢鍦ㄦ绯荤粺涓鍒嗕负浜斾釜绾у埆:DEBUG銆両NFO銆乄ARN銆丒RROR鍜孎ATAL銆傝繖浜斾釜绾у埆鏄湁椤哄簭鐨,DEBUG < INFO < WARN < ERROR < FATAL,鍒嗗埆鐢ㄦ潵鎸囧畾杩欐潯鏃ュ織淇℃伅鐨勯噸瑕佺▼搴,鏄庣櫧杩欎竴鐐瑰緢閲嶈,Log4j鏈変竴...
  • web寮鍙戜娇鐢spring MVC鎬庝箞瀵圭敤鎴锋搷浣滆涓鸿繘琛璁板綍,灏辨槸鏃ュ織(鐢ㄦ埛鐧诲綍...
    绛旓細璀鎵撳嵃浜岀淮鐮佹ā鍧楋細log.debug("qrcode: userid=" + userid);
  • spring mvc 鎬庝箞鑾峰緱鎬璁板綍鏁癱ount
    绛旓細<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> contextConfigLocation classpath:springmvc-servlet.xml </init-param> <!-- <load-on-startup>1</load-on-startup> --> </servlet> <servlet...
  • Spring MVC妗嗘灦鐭ヨ瘑鎬荤粨(鍓嶅悗绔殑妗ユ)
    绛旓細鏁村悎搴旂敤绀轰緥 Spring MVC妗嗘灦甯镐笌鏁版嵁搴撳MySQL銆丏ruid杩炴帴姹狅紝鏃ュ織宸ュ叿濡侺og4j锛屼互鍙奙yBatis绛夋暟鎹闂鏋剁揣瀵嗙粨鍚堛傚悓鏃讹紝閫氳繃鏁村悎鍗曞厓娴嬭瘯宸ュ叿濡侸unit锛屽疄鐜板叏闈㈢殑寮鍙戝拰娴嬭瘯鐜銆傛荤粨锛歋pring MVC閫氳繃缁嗚嚧鐨勯厤缃拰IOC绠$悊锛岄珮鏁堝湴澶勭悊鐢ㄦ埛璇锋眰锛屽疄鐜板墠鍚庣鐨勬棤缂濆鎺ワ紝鏄幇浠eb寮鍙戜腑鐨勯噸瑕佸熀鐭炽
  • 鎬庝箞鐪springmvc鐨鐜?
    绛旓細3. 妫鏌ュ簲鐢ㄧ▼搴忕殑鏃ュ織鏂囦欢銆傚鏋Spring MVC鏃犳硶鍔犺浇缁勪欢鎴栧鐞嗚姹傦紝瀹冨彲鑳戒細灏嗛敊璇秷鎭璁板綍鍒板簲鐢ㄧ▼搴忕殑鏃ュ織鏂囦欢涓傛偍鍙互鎵撳紑鏃ュ織鏂囦欢骞舵煡鐪嬪叾涓殑浠讳綍閿欒娑堟伅锛屼互纭畾搴旂敤绋嬪簭鏄惁姝e湪杩愯Spring MVC鐜銆4. 鍦ㄦ祻瑙堝櫒涓闂簲鐢ㄧ▼搴忋傛渶鍚庯紝鎮ㄥ彲浠ュ皾璇曞湪娴忚鍣ㄤ腑璁块棶搴旂敤绋嬪簭鐨刄RL,浠ョ‘淇漇pring MVC姝e湪...
  • springmvc鎷︽埅鍣ㄦ庝箞鐢
    绛旓細SpringMVC 涓殑Interceptor 鎷︽埅鍣ㄤ篃鏄浉褰撻噸瑕佸拰鐩稿綋鏈夌敤鐨勶紝瀹冪殑涓昏浣滅敤鏄嫤鎴敤鎴风殑璇锋眰骞惰繘琛岀浉搴旂殑澶勭悊銆傛瘮濡傞氳繃瀹冩潵杩涜鏉冮檺楠岃瘉锛屾垨鑰呮槸鏉ュ垽鏂敤鎴锋槸鍚︾櫥闄嗙瓑銆備竴. 浣跨敤鍦烘櫙 1銆鏃ュ織璁板綍锛氳褰曡姹備俊鎭殑鏃ュ織锛屼互渚胯繘琛屼俊鎭洃鎺с佷俊鎭粺璁°佽绠桺V锛圥age View锛夌瓑銆2銆佹潈闄愭鏌ワ細濡傜櫥褰曟娴嬶紝杩涘叆...
  • spring+springmvc+mybatis妗嗘灦闇瑕佸摢浜沯ar鍖
    绛旓細鍙﹀锛岃繕鏈変袱涓綋鍋氳ˉ鍏呯殑jar鍖咃細锛1锛鏃ュ織jar锛屼緥濡俵og4j.jar锛屽緢澶氭鏋堕兘渚濊禆鏃ュ織jar鍖咃紝鐢ㄤ簬鎵撳嵃鏃ュ織锛屾柟渚胯皟璇曘傦紙2锛塵ybatis-spring jar锛屽彲浠ュ皢MyBatis浠g爜鏃犵紳鍦版暣鍚堝埌Spring涓傝ˉ鍏呯殑jar锛岄潪蹇呴』瑕佺敤鍒扮殑锛屽彧鎯宠窇涓猰ybatis demo锛屽垯涓渶瑕佷笂闈㈢殑涓や釜蹇呴』jar鍗冲彲銆侻yBatis涓枃瀹樼綉 ...
  • spring mvc鎬庢牱缁撳悎log4j鐨
    绛旓細Spring MVC灞炰簬SpringFrameWork鐨勫悗缁骇鍝侊紝宸茬粡铻嶅悎鍦⊿pring Web Flow閲岄潰銆 缂栬緫鏈Spring MVC 妗嗘灦 Spring 妗嗘灦鎻愪緵浜嗘瀯寤 Web 搴旂敤绋嬪簭鐨勫叏鍔熻兘 MVC 妯″潡銆備娇鐢 Spring 鍙彃鍏ョ殑 MVC 鏋舵瀯锛屽彲浠ラ夋嫨鏄娇鐢ㄥ唴缃殑 Spring Web
  • 扩展阅读:www.sony.com.cn ... spring mvc配置文件详解 ... paperpass免费入口 ... springmvc处理流程图 ... spring mvc执行流程简说 ... springmvc框架 ... spring mvc核心类和注解 ... spring mvc三层 是哪三层 ... spring mvc教程 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网