关于AOP记录日志的做法
来源:互联网 发布:linux gcc rpm安装包 编辑:程序博客网 时间:2024/06/10 01:04
记录日志类
package com.suning.sdipa.aop.log;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target({ ElementType.METHOD, ElementType.TYPE })public @interface AdminLog { /** * 系统编码 */ String systemType() default "SDIPA"; /** * * 模块编码 <br> */ String moduleType(); /** * 操作类型 */ String operType();}
拦截器类
package com.suning.sdipa.aop.log;import java.lang.reflect.Method;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.atomic.AtomicInteger;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.aspectj.lang.reflect.MethodSignature;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Component;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import com.google.common.collect.Lists;import com.google.common.util.concurrent.ThreadFactoryBuilder;import com.google.gson.Gson;import com.google.gson.GsonBuilder;import com.suning.rca.dto.LogRequest;import com.suning.rca.service.UserRCAService;import com.suning.rsf.consumer.ServiceLocator;@Aspect@Componentpublic class AdminLogInterceptor { private static final Logger LOGGER = LoggerFactory.getLogger("operateLog"); private static final Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create(); private UserRCAService userRCAService = ServiceLocator.getService(UserRCAService.class, "userRCAService"); private final AtomicInteger threadNumber = new AtomicInteger(1); private final ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime() .availableProcessors() + 2, new ThreadFactoryBuilder().setNameFormat(AdminLogThreadName()).setDaemon(true) .build()); private String AdminLogThreadName() { String name = "AdminLogThread-" + threadNumber.getAndIncrement(); return name; } @Pointcut("@annotation(com.suning.sdipa.aop.log.AdminLog)") public void AdminLogAspect() { } @Before("AdminLogAspect()") public void doBefore(JoinPoint joinPoint) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) .getRequest(); final String userId = getLoginUserIdFromCookie(request); Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); AdminLog reuqired = method.getAnnotation(AdminLog.class); final String systemType = reuqired.systemType(); final String operType = reuqired.operType(); final String moduleType = reuqired.moduleType(); final Object[] args = joinPoint.getArgs(); executorService.submit(new Runnable() { @Override public void run() { List<Object> paramList = Lists.newArrayList(); for (Object arg : args) { if (arg instanceof HttpServletRequest || arg instanceof HttpServletResponse) { continue; } paramList.add(arg); } Map<String, Object> json = new HashMap<String, Object>(); json.put("systemType", systemType); json.put("userId", userId); json.put("operType", operType); json.put("moduleType", moduleType); json.put("param", paramList); LOGGER.info("AdminOperLog[" + gson.toJson(json) + "]"); LogRequest log = new LogRequest(); log.setOperatorId(userId); log.setSystemCode(systemType); log.setModule(moduleType); log.setType(operType); log.setBeforeInfo(gson.toJson(paramList)); userRCAService.operLog(log); } }); } private static final String COOKIE_KEY = "loginToken"; public static String getLoginUserIdFromCookie(HttpServletRequest request) { String loginTokenCookie = getLoginAllCookie(request); return loginTokenCookie.split("\\|")[1]; } private static String getLoginAllCookie(HttpServletRequest request) { Cookie[] cookies = request.getCookies(); String loginTokenCookie = null; if (cookies != null && cookies.length > 0) { for (Cookie cookie : cookies) { if (COOKIE_KEY.equals(cookie.getName())) { loginTokenCookie = cookie.getValue(); break; } } } return loginTokenCookie; }}
xml配置信息:
<aop:aspectj-autoproxy proxy-target-class="true" />
阅读全文
0 0
- 关于AOP记录日志的做法
- Spring AOP的日志记录
- Spring AOP的日志记录
- 关于aop知识的记录
- spring AOP的 操作日志记录功能
- 使用Spring AOP 的@AspectJ记录日志
- spring的AOP实现记录操作日志
- 利用Spring的AOP进行日志记录
- spring aop 实现系统日志的记录
- JavaScript创建日志文件并记录时间的做法
- spring aop 日志记录
- Spring AOP记录日志!
- Spring AOP记录日志! .
- 用 aop 记录日志
- AspectJ aop记录日志
- spring aop记录日志
- aop 日志记录学习
- Spring AOP 记录日志
- mybatis关系映射的一些总结
- A316J(HCPL-316J)驱动电路的检修
- 大端与小端存储模式详解
- build.gradle常见配置方式
- 网球线的几个常见问题
- 关于AOP记录日志的做法
- 第11期 《精品选择》2017年6月刊
- 汉诺塔问题。
- 正则表达式:Pattern类与Matcher类详解
- CSS3(定位)
- 01背包问题 hdu2602 Bone Collector
- 《Tomcat内核设计剖析》勘误表
- zip压缩和解压的方法 实测
- Linux下gulp报错Error:watch ENOSPC的解决方法