Spring 切面 记录请求日志
来源:互联网 发布:超星尔雅网络课程答案 编辑:程序博客网 时间:2024/05/16 04:52
1、创建标签
import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(value = ElementType.METHOD)@Retention(value = RetentionPolicy.RUNTIME)@Documentedpublic @interface Log { String action() default ""; String description() default "";}
2、创建切面
import java.lang.reflect.Method;import java.util.Date;import org.apache.log4j.Logger;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.Signature;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.aspectj.lang.reflect.MethodSignature;import org.springframework.stereotype.Component;import com.freemarker.util.DateUtils;/** * spring切面 请求日志 * * @author 96315 * */@Aspect@Componentpublic class RequestLogger { private static Logger logger = Logger.getLogger(RequestLogger.class); @Pointcut("execution(* com..*Controller.*(..))") public void controllerAspect() { }; /** * 请求记录 * @param point */ @AfterReturning(pointcut = "controllerAspect()", returning = "r") public void log(final JoinPoint point) { handleLog(point,null); } /** * 日志--异常处理 */ @AfterThrowing(pointcut = "controllerAspect()", throwing = "e") public void afterThrowing(JoinPoint joinPoint, Exception e) { handleLog(joinPoint,e); } /** * 日志处理,存入数据库 */ private void handleLog(JoinPoint joinPoint, Exception e) { try { //获取注解标签 Log log = getLog(joinPoint); if (log == null) {//无注解标签 return; } if (logger.isDebugEnabled()) { StringBuffer sb = new StringBuffer(); sb.append("\n"); sb.append("时间:"); sb.append(DateUtils.format(new Date(System.currentTimeMillis()),DateUtils.YYYY_MM_DD_HH_MM_SS)); sb.append("\n"); sb.append("请求:"); sb.append(log.action()); sb.append("\n"); // sb.append("用户:"); // sb.append(AuthcUtils.getAuth().getUsername()); // sb.append("\n"); sb.append("方法:"); sb.append(joinPoint.getSignature()); sb.append("\n"); sb.append("描述:"); sb.append(log.description()); sb.append("\n"); if (e != null) { sb.append("异常:"); sb.append(e.getMessage()); sb.append("\n"); logger.error(sb.toString()); }else{ logger.info(sb.toString()); } } } catch (Exception ex) { ex.printStackTrace(); logger.error("日志记录异常:\n"+ex.getMessage()); } } /** * 是否存在注解,如果存在就记录日志 * @param joinPoint * @return * @throws Exception */ private static Log getLog(JoinPoint joinPoint) throws Exception { Signature signature = joinPoint.getSignature(); MethodSignature methodSignature = (MethodSignature) signature; Method method = methodSignature.getMethod(); if (method != null) { return method.getAnnotation(Log.class); } return null; }}
3、Spring配置
<!-- 声明自动为spring容器中那些配置@aspectJ切面的bean创建代理,织入切面 --> <aop:aspectj-autoproxy proxy-target-class="true" /> <!-- 自动扫描路径 --> <context:component-scan base-package="com.freemarker.aspect.log" />
0 0
- Spring 切面 记录请求日志
- spring aop切面应用,记录日志、请求处理耗时
- spring aop 切面记录log4j日志
- spring配置日志切面,实现系统操作日志记录
- aop切面记录日志
- 面向切面日志记录
- 使用Spring切面编程记录操作行为的日志
- Spring—AOP实践,利用切面记录用户操作日志
- Spring切面管理日志
- spring Aspect 切面日志
- 记录spring切面代码,
- springmvc 切面记录操作日志
- springmvc 切面记录操作日志
- AOP切面进行日志记录
- spring aop 切面记录log4j日志 之around记录异常信息
- spring aop 面向切面编程 如何来做一个强大的日志记录功能.原创
- spring aop 面向切面编程 如何来做一个强大的日志记录功能
- spring请求数据与返回数据日志记录
- 文章标题
- JAVA多线程之volatile 与 synchronized 的比较
- 编辑返回键
- Java数组
- 项目管理phabricator+git+arcanist环境搭建和安装
- Spring 切面 记录请求日志
- numpy的下载与安装教程——(解决No module named numpy问题)
- 电源管理-电压状态划分
- 源码编译wget问题解决
- Java中产生随机数的几种常用方式
- javascript中,Uncaught TypeError: Cannot set property 'onchange' of null错误解决
- Android之表单验证,Validation三方集成。
- 防盗链
- Bootstrap笔记6—下拉菜单