开发者社区> 张风捷特烈> 正文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SpringBoot实战(四)之使用JDBC和Spring访问数据库
这里演示的是h2databse示例,所以简单的介绍普及下h2database相关知识 H2数据库是一个开源的关系型数据库。 H2是一个嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一个十分方便的web控制台用于操作和管理数据库内容。
2314 0
SpringMVC访问静态资源的三种方式
 如果你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了。
1507 0
通过Postman实现专有云云解析API网关的请求签名与调试
本文主要使用Postman调试API网关的方法,文中使用Pre-request Script实现了阿里专有云云解析API网关的签名算法。
476 0
Android 获取Contacts 联系人 姓名 号码 照片信息
直接贴代码不解释 private void getCursors() { Cursor phoneCursor = this.managedQuery( ContactsContract.
499 0
安全性异常:不允许所请求的注册表访问权 EventLog
症状使用 ASP.NET 在事件日志中创建一个新的事件源时,您可能会收到下面的错误信息:System.Security.SecurityException:Requested registry access is not allowed. 原因默认情况下,ASP.NET 工作进程的用户令牌是 ASPNET(或者,对于 Internet 信息服务 [IIS] 6.0 上运行的应用程序是 NetworkService)。
890 0
+关注
张风捷特烈
安卓工程师,全站工程师
91
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载