2.4 日志处理

2.4.1 记录日志内容

  • 请求url
  • 访问者ip
  • 调用方法classMethod
  • 参数args
  • 返回内容

2.4.2 新建包aspect,新建日志切面处理类

package com.fei.aspect;

import java.util.Arrays;

import javax.servlet.http.HttpServletRequest;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.After;
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; /**
* Created by zxf on 2019年9月28日
*/
@Aspect // 进行切面操作
@Component // 组件扫描
public class LogAspect { private final Logger logger = LoggerFactory.getLogger(this.getClass()); // 切面
@Pointcut("execution(* com.fei.controller.*.*(..))")
public void log() {
} // 切面前操作
@Before("log()") // 传递切面方法
public void doBefore(JoinPoint joinPoint) {
logger.info("---------doBefore------"); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest(); String url = request.getRequestURL().toString();
String ip = request.getRemoteAddr(); Signature signature = joinPoint.getSignature();
String classMethod = signature.getDeclaringTypeName() + "." + signature.getName();
Object[] args = joinPoint.getArgs(); RequestLog requestLog = new RequestLog(url, ip, classMethod, args); logger.info("Reqeust : {}", requestLog);
} // 切面后操作
@After("log()") // 传递切面方法
public void doAfter() {
logger.info("---------doAfter------");
} // 切面返回后操作
@AfterReturning(returning = "result", pointcut = "log()") // 传递切面方法
public void doAfterReturn(Object result) {
logger.info("Result : {}", result);
} /**
* 封装日志记录需要的内容
*
* @author fei
*
*/
private class RequestLog {
private String url;// 请求url
private String ip;// 访问者ip private String classMethod;// 调用方法
private Object[] args;// 参数 public RequestLog(String url, String ip, String classMethod, Object[] args) {
super();
this.url = url;
this.ip = ip;
this.classMethod = classMethod;
this.args = args;
} @Override
public String toString() {
return "[url=" + url + ", ip=" + ip + ", classMethod=" + classMethod + ", args=" + Arrays.toString(args)
+ "]";
} }// RequestLog
}// LogAspect

测试日志切面处理Controller

@Controller
public class IndexController { @GetMapping("/{id}/{name}")
public String toIndex(@PathVariable("id") Integer id, @PathVariable("name") String name) {
System.out.println("====index()方法执行===="); return "index";
}
}

最新文章

  1. android初级篇之apk签名key keystore格式转pk8+x509.pem
  2. deepin linux字体渲染(转)
  3. MyCat:取代Cobar数据库中间件
  4. Python自动化之sqlalchemy
  5. git 学习笔记1--config & help
  6. c3p0、dbcp<转>
  7. iOS7 中的JavaScriptCore简单介绍
  8. kernel里面出现了类似isegfault at xxx ip 错误
  9. No Suitable Driver Found For Jdbc_我的解决方法
  10. python小算法(一)
  11. DevExpress12.2.4 GridControl相关技巧
  12. Python 3语法小记(六)条件、循环和assert、pass、del
  13. 0104.1——视图控制器UIViewController
  14. Mac中QT程序发布
  15. 你应该知道的CSS文字大小单位PX、EM、PT
  16. Java I/O基础
  17. [2017-8-02]Android Learning Day8
  18. F. 数学上来先打表
  19. [CNN] Understanding Convolution
  20. Hadoop简介与伪分布式搭建—DAY01

热门文章

  1. USB转换PS2接线原理
  2. 2018.03.30 abap屏幕标签保存之前执行过的状态
  3. Delphi IDE使用的一些主要技巧
  4. 11 ORA-8102:Index Corruption解析
  5. 【不错】MySQL 事务隔离级别
  6. python每日一练:0015题
  7. 应用安全 - 中间件漏洞 - Nostromo
  8. kafka学习(六)
  9. XSS注入常用语句(整理)
  10. spring boot @Transactional的一个小坑