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

简介: 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
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
3127 1
|
7月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
594 4
|
7月前
|
XML JSON Java
【SpringBoot(三)】从请求到响应再到视图解析与模板引擎,本文带你领悟SpringBoot请求接收全流程!
Springboot专栏第三章,从请求的接收到视图解析,再到thymeleaf模板引擎的使用! 本文带你领悟SpringBoot请求接收到渲染的使用全流程!
566 3
|
8月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1552 5
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1420 0
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
1467 0
|
Java API 开发者
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——slf4j 介绍
在软件开发中,`System.out.println()`常被用于打印信息,但大量使用会增加资源消耗。实际项目推荐使用slf4j结合logback输出日志,效率更高。Slf4j(Simple Logging Facade for Java)是一个日志门面,允许开发者通过统一方式记录日志,无需关心具体日志系统。它支持灵活切换日志实现(如log4j或logback),且具备简洁占位符和日志级别判断等优势。阿里巴巴《Java开发手册》强制要求使用slf4j,以保证日志处理方式的统一性和维护性。使用时只需通过`LoggerFactory`创建日志实例即可。
831 0
|
10月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
1834 5
|
JSON API 数据格式
【Azure APIM】如何把APIM中处理的请求的所有请求头保存在日志中?
Azure API Management 默认诊断日志不记录请求的 Header 和 Body 信息。为实现记录,可通过配置 Trace 策略解决。例如,使用 `context.Request.Headers` 和 `context.Request.Body` 获取相关信息,并以 JSON 或字符串格式保存。示例代码展示了如何将 Headers 转换为 JSON 或逗号分隔字符串形式记录。相关参考资料包括 Set Body Policy 和 Trace Policy 官方文档,帮助进一步了解与扩展功能。
302 36
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
1120 5