博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java aop 日志打印 正则设置
阅读量:7170 次
发布时间:2019-06-29

本文共 3726 字,大约阅读时间需要 12 分钟。

package tz.lion.Utils.aop; import com.alibaba.fastjson.JSON; import org.springframework.web.multipart.MultipartFile; import tz.lion.config.shiro.SessionHolder; import tz.lion.domain.master.SysUser; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; 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 org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.Enumeration; /**  * aop实现web层的日志切面  * @author 104  */ @Aspect @Component public class WebLogAspect {
private Logger logger = LoggerFactory.getLogger("webLogAspect"); ThreadLocal
startTime = new ThreadLocal
(); /** * 定义一个切入点 */ @Pointcut("execution(public * tz.lion.controller.*..*.*(..))") public void webLog(){} /** * 定义一个非切入点 * controller 方法名称,以UnAop 开头 不打印日志;例如文件参数等长字符 */ @Pointcut("!execution(public * tz.lion.controller.*..*.UnAop*(..))") private void logSender(){} /** * 处理日志,打印请求相关数据 * @param joinPoint */ @Before("webLog()&&logSender()") public void doBefore(JoinPoint joinPoint){
startTime.set(System.currentTimeMillis()); SysUser user = SessionHolder.getHolder().getSessionAttribute(SessionHolder.CURRENT_USER); if(user != null){
logger.info("UserId : "+user.getId()); } // 接收到请求,记录请求内容 logger.info("WebLogAspect.doBefore()"); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); try{
// 记录下请求内容 logger.info("URL : " + request.getRequestURL().toString()); logger.info("HTTP_METHOD : " + request.getMethod()); logger.info("IP : " + request.getRemoteAddr()); logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); boolean hasFile=false; for(Object obj:joinPoint.getArgs()){
if(obj instanceof MultipartFile){
hasFile=true; } } if(hasFile){
logger.info("ARGS : 上传文件接口 "); }else{
logger.info("ARGS : " + JSON.toJSONString(joinPoint.getArgs())); } }catch(Exception e){
logger.info("获取请求参数失败"); } Enumeration
enu=request.getParameterNames(); while(enu.hasMoreElements()){ String paraName=enu.nextElement(); logger.info("request paraName ARGS"+paraName+": "+request.getParameter(paraName)); } } /** * 处理完请求,返回内容 * @param joinPoint */ @AfterReturning(returning="result", pointcut = "webLog()") public void doAfterReturning(JoinPoint joinPoint,Object result){
logger.info("WebLogAspect.doAfterReturning()"); String res = JSON.toJSONString(result); if(res.length()<=2000){
logger.info("返回数据:"+res); } logger.info("耗时(毫秒) : " + (System.currentTimeMillis() - startTime.get())); } }

转载于:https://www.cnblogs.com/CaptainLin/p/10794192.html

你可能感兴趣的文章
sql server 报表允许用windows 身份登录的任何人进入
查看>>
Engineering math
查看>>
call for paper
查看>>
leetcode — convert-sorted-array-to-binary-search-tree
查看>>
Power of Cryptography
查看>>
第十四个目标 (fzu)
查看>>
JS - The react framework
查看>>
Leetcode | Path Sum I && II
查看>>
数据库存储的时间与数据读写时间相差14个小时
查看>>
Linux系统之路——如何在服务器用U盘安装CentOS7.2(一)
查看>>
论文阅读笔记十四:Decoupled Deep Neural Network for Semi-supervised Semantic Segmentation(CVPR2015)...
查看>>
查看tensorflow是否为MKL版本命令
查看>>
分层索引的汇总用法
查看>>
视图、触发器、事务、存储过程、函数、控制流程
查看>>
正则式记录
查看>>
JavaScript数组方法的兼容性写法 汇总:indexOf()、forEach()、map()、filter()、some()、every()...
查看>>
Qcreator3.1.2调试器(windows)版本
查看>>
java.lang包中异常
查看>>
1001种玩法 | Python Prompt Toolkit:构建强大交互式命令行的 Python 工具库
查看>>
shell和bat 监控进程,自动关机
查看>>