SpringBoot-18-之AOP+log4j 记录访问请求信息

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: org.springframework.boot spring-boot-starter-aop log4j log4j 1.
<!--aop依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

AOP拦截类
/**
 * 作者:张风捷特烈
 * 时间:2018/8/17 0017:11:06
 * 邮箱:1981462002@qq.com
 * 说明:AOP+log4j 记录访问请求信息
 */
@Aspect 
@Component
public class LogAspect {
    private static final Logger sLogger = Logger.getLogger(LogAspect.class);

    /**
     * 拦截com.toly1994.toly_mybatis.controller包下所以方法
     */
    @Pointcut("execution(public * com.toly1994.toly_mybatis.controller.*.*(..))")
    public void log() {

    }

    /**
     * 前置通知
     *
     * @param joinPoint
     */
    @Before("log()")//log()方法之前
    public void doBefore(JoinPoint joinPoint) {
        //接收请求,记录请求
        ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = sra.getRequest();
        //记录日志
        sLogger.info("url" + request.getRequestURI().toString());
        sLogger.info("method" + request.getMethod());
        sLogger.info("ip" + request.getRemoteAddr());

        Enumeration<String> names = request.getParameterNames();
        while (names.hasMoreElements()) {
            String name = names.nextElement();
            sLogger.info("name:" + name + ",value:{" + request.getParameter(name) + "}");

        }
    }

    /**
     * 后置通知
     * @param ret
     */
    @AfterReturning(returning = "ret", pointcut = " log() ")
    public void doAfter(Object ret) {
        sLogger.info("response" + ret);//处理完成,返回
    }
}

访问上篇的接口:http://localhost:8080/findByName?name=赤凰

12:04:39,451  INFO LogAspect:46 - url/findByName
12:04:39,453  INFO LogAspect:47 - methodGET
12:04:39,454  INFO LogAspect:48 - ip0:0:0:0:0:0:0:1
12:04:39,455  INFO LogAspect:53 - name:name,value:{赤凰}
12:04:39,460  INFO LogAspect:60 - responseSword(id=24, name=赤凰, atk=0, hit=100, crit=5, attr_id=1, type_id=2)

附录:log4j 简单配置。参考了这里,更多配置见

log4j.properties
#INFO级别 文件输出 控制台输出
log4j.rootLogger=INFO, FILE, CONSOLE
#将日志信息输出到磁盘
log4j.appender.FILE=org.apache.log4j.FileAppender
#磁盘路径
log4j.appender.FILE.File=F:/SpringBootFiles/log/log.txt
#缓存大小,$$:8k
log4j.appender.FILE.BufferSize=8192
#请求的日志消息被立即输出,$$:true
log4j.appender.FILE.ImmediateFlush=true
#日志存储到缓存当中,当缓存满了后才输出到磁盘文件中,$$:false,(与ImmediateFlush互斥)
log4j.appender.FILE.BufferedIO=false
#指定日志输出的最低级别,$$:DEBUG
log4j.appender.FILE.Threshold=DEBUG
#追加模式添加,$$:true
log4j.appender.FILE.Append=true
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
################################################################
#将日志信息输出到控制台中
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
#将日志信息使用System.out.println输出到控制台
log4j.appender.CONSOLE.Target=System.out
#请求的日志消息被立即打印,$$:true
log4j.appender.CONSOLE.ImmediateFlush=true
#指定日志打印的最低级别,$$:DEBUG
log4j.appender.CONSOLE.Threshold=DEBUG
#打印编码
log4j.appender.CONSOLE.encoding=UTF-8

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.conversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
开发框架 前端开发 网络协议
Spring Boot结合Netty和WebSocket,实现后台向前端实时推送信息
【10月更文挑战第18天】 在现代互联网应用中,实时通信变得越来越重要。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为客户端和服务器之间的实时数据传输提供了一种高效的解决方案。Netty作为一个高性能、事件驱动的NIO框架,它基于Java NIO实现了异步和事件驱动的网络应用程序。Spring Boot是一个基于Spring框架的微服务开发框架,它提供了许多开箱即用的功能和简化配置的机制。本文将详细介绍如何使用Spring Boot集成Netty和WebSocket,实现后台向前端推送信息的功能。
575 1
|
23天前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
|
2月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
79 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
126 3
|
1月前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
58 2
|
1月前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
40 0
|
2月前
|
JSON NoSQL Java
springBoot:jwt&redis&文件操作&常见请求错误代码&参数注解 (九)
该文档涵盖JWT(JSON Web Token)的组成、依赖、工具类创建及拦截器配置,并介绍了Redis的依赖配置与文件操作相关功能,包括文件上传、下载、删除及批量删除的方法。同时,文档还列举了常见的HTTP请求错误代码及其含义,并详细解释了@RequestParam与@PathVariable等参数注解的区别与用法。
|
2月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
233 2
|
2月前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
61 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
3月前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
54 6