spring aop注解配置web日志

下面是配置文件aop-servlet.xml,使用的版本是spring3.1

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.  xmlns="http://www.springframework.org/schema/beans"  
  4.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.  xmlns:aop="http://www.springframework.org/schema/aop"  
  6.  xmlns:tx="http://www.springframework.org/schema/tx"  
  7.  xmlns:p="http://www.springframework.org/schema/p"  
  8.  xsi:schemaLocation="http://www.springframework.org/schema/beans  
  9.        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
  10.       <span style="color:#ff0000"> </span>http://www.springframework.org/schema/aop  
  11.        http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  
  12.        http://www.springframework.org/schema/tx  
  13.        http://www.springframework.org/schema/tx/spring-tx-3.1.xsd  
  14.       ">  
  15.   
  16.   
  17. <aop:aspectj-autoproxy />  
  18. <bean id="logAdvice" class="com.cloudData.aop.LogAdvice"></bean>  
  19. </beans>  
下面是LogAdvice.java
  1. package com.cloudData.aop;  
  2.   
  3. import org.aspectj.lang.JoinPoint;  
  4. import org.aspectj.lang.annotation.After;  
  5. import org.aspectj.lang.annotation.AfterThrowing;  
  6. import org.aspectj.lang.annotation.Aspect;  
  7. import org.aspectj.lang.annotation.Before;  
  8. import org.aspectj.lang.annotation.Pointcut;  
  9.   
  10. /** 
  11.  * @author LiuKe 
  12.  * @version 1.0 2013-10-21 
  13.  * @show 日志切面 
  14.  */  
  15. @Aspect  
  16. public class LogAdvice{  
  17.   
  18.     @Pointcut("execution(* *.handleRequest(..))")  
  19.     public void log(){}  
  20.       
  21.     @Before("log()")  
  22.     public void LogRequest(JoinPoint joinPoint)  
  23.     {  
  24.         Object obj[] = joinPoint.getArgs();  
  25.           for(Object o :obj){  
  26.            System.out.println("----------------"+o+"----------------");  
  27.           }  
  28. //        System.out.println("========checkSecurity=="+joinPoint.getSignature().getName());//这个是获得方法名  
  29. //      System.out.println("记录了一个请求");  
  30.     }  
  31.       
  32.     @After("log()")  
  33.     public void LogResponse(JoinPoint joinPoint)  
  34.     {  
  35.     }  
  36.     @AfterThrowing("log()")  
  37.     public void LogThrowing(JoinPoint joinPoint)  
  38.     {  
  39.     }  
  40. }  
  1. @Pointcut("execution(* *.handleRequest(..))")  
  2.     public void log(){}  

指明了log()方法代表的切点,可以理解为log()方法是一个钩子,他的方法体为空即可,它钩到@Pointcut定义的切点方法,在后面的@Before等配置中,直接配置“log()”即可

@Before("log()"),@After("log()"),@AfterThrowing("log()")分别表示在* *.handleRequest(..)之前调用,* *.handleRequest(..)之后调用,

* *.handleRequest(..)抛出异常调用。

JoinPoint代表切点,joinpoint实例中可以获取切点方法的方法名,参数等信息。

最后,在LogRequest(JoingPoint joinPoint)等方法中,添加日志代码即可。



下面贴出几种常用的记录日志的方法,可自行选择一种加入到LogRequest LogResponse 或LogThrowing中,下面提供的几种记录日志方法的区别,读者可自己测试体会

Log4jTest.java

  1. package com.test.log4jtest;  
  2.   
  3. import java.io.FileOutputStream;  
  4.   
  5. import org.apache.log4j.ConsoleAppender;  
  6. import org.apache.log4j.FileAppender;  
  7. import org.apache.log4j.HTMLLayout;  
  8. import org.apache.log4j.Level;  
  9. import org.apache.log4j.Logger;  
  10. import org.apache.log4j.PatternLayout;  
  11. import org.apache.log4j.SimpleLayout;  
  12. import org.apache.log4j.WriterAppender;  
  13.   
  14. public class Log4jTest {  
  15.     static Logger logger = Logger.getLogger(Log4jTest.class);  
  16.   
  17.   
  18.     public static void main(String args[]) {  
  19.   
  20. //      output1();//SimpleLayout和 FileAppender  
  21. //      output2();//HTMLLayout和 WriterAppender  
  22.         output3();//PatternLayout和 ConsoleAppender  
  23.         }  
  24.     public static void output1()  
  25.     {  
  26.         SimpleLayout layout = new SimpleLayout();  
  27.         FileAppender appender = null;  
  28.         try {  
  29.         appender = new FileAppender(layout,"output1.txt",false);  
  30.         } catch(Exception e) {}  
  31.         logger.addAppender(appender);  
  32.         logger.setLevel((Level) Level.DEBUG);  
  33.         logger.debug("Here is some DEBUG");  
  34.         logger.info("Here is some INFO");  
  35.         logger.warn("Here is some WARN");  
  36.         logger.error("Here is some ERROR");  
  37.         logger.fatal("Here is some FATAL");  
  38.     }  
  39.     public static void output2()  
  40.     {  
  41.         HTMLLayout layout = new HTMLLayout();  
  42.         WriterAppender appender = null;  
  43.         try {  
  44.         FileOutputStream output = new FileOutputStream("output2.html");  
  45.         appender = new WriterAppender(layout,output);  
  46.         } catch(Exception e) {}  
  47.         logger.addAppender(appender);  
  48.         logger.setLevel((Level) Level.DEBUG);  
  49.         logger.debug("Here is some DEBUG");  
  50.         logger.info("Here is some INFO");  
  51.         logger.warn("Here is some WARN");  
  52.         logger.error("Here is some ERROR");  
  53.         logger.fatal("Here is some FATAL");  
  54.     }  
  55.     public static void output3()  
  56.     {  
  57.         // Note, %n is newline  
  58.                 String pattern = "Milliseconds since program start: %r %n";  
  59.                 pattern += "Classname of caller: %C %n";  
  60.                 pattern += "Date in ISO8601 format: %d{ISO8601} %n";  
  61.                 pattern += "Location of log event: %l %n";  
  62.                 pattern += "Message: %m %n %n";  
  63.   
  64.                 PatternLayout layout = new PatternLayout(pattern);  
  65.                 ConsoleAppender appender = new ConsoleAppender(layout);  
  66.                 logger.addAppender(appender);  
  67.                 logger.setLevel((Level) Level.DEBUG);  
  68.                 logger.debug("Here is some DEBUG");  
  69.                 logger.info("Here is some INFO");  
  70.                 logger.warn("Here is some WARN");  
  71.                 logger.error("Here is some ERROR");  
  72.                 logger.fatal("Here is some FATAL");  
  73.     }  

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资源 5来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资 5源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值