SpringBoot+Maven项目实战(6):整合Log4j和Aop,实现简单的日志记录

来源:互联网 发布:知乎怎么称呼别人 编辑:程序博客网 时间:2024/06/10 14:04

目录结构

这里写图片描述

pom.xml文件添加依赖

<!--log4j2--><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-log4j2</artifactId></dependency><!-- aop --><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-aop</artifactId></dependency>

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?><Configuration status="INFO">    <Appenders>        <Console name="Console" target="SYSTEM_OUT">            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />        </Console>    </Appenders>    <Loggers>        <Logger name="com.sbm" level="trace" additivity="false">            <AppenderRef ref="Console" />        </Logger>        <Root level="error">            <AppenderRef ref="Console" />        </Root>    </Loggers></Configuration>

Aop记录Log类:AppLogAspect

package com.sbm.aspects;import com.sbm.util.IPUtil;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;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.springframework.core.annotation.Order;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.Arrays;import java.util.Enumeration;/** * sbm * Created by yadong.zhang on com.sbm.aspects * User:yadong.zhang * Date:2016/10/21 * Time:15:53 */@Component@Aspect/* * 定义切面执行的优先级,数字越低,优先级越高 * 在切入点之前执行:按order值有小到大的顺序执行 * 在切入点之后执行:按order值由大到小的顺序执行 */@Order(-5)public class AppLogAspect {    private Logger logger = LogManager.getLogger(AppLogAspect.class);    // 保证每个线程都有一个单独的实例    private ThreadLocal<Long> time = new ThreadLocal<>();    @Pointcut("execution(* com.sbm.controller..*.*(..))")    public void pointcut() {    }    @Before("pointcut()")    public void doBefore(JoinPoint joinPoint) {        time.set(System.currentTimeMillis());        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();        HttpServletRequest request = attributes.getRequest();        //记录请求的内容        logger.info("Request URL: " + request.getRequestURL().toString());        logger.info("Request Method: " + request.getMethod());        logger.info("User-Agent: " + request.getHeader("User-Agent"));        logger.info("Class Method: " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());        logger.info("Cookies: " + request.getCookies());        logger.info("Params: " + Arrays.toString(joinPoint.getArgs()));        Enumeration<String> enums = request.getParameterNames();        while (enums.hasMoreElements()) {            String paraName = enums.nextElement();            logger.info(paraName + ":" + request.getParameter(paraName));        }    }    @AfterReturning("pointcut()")    public void doAfterReturning(JoinPoint joinPoint) {        logger.info("耗时 : " + ((System.currentTimeMillis() - time.get())) + "ms");        logger.info("AppLogAspect.doAfterReturning()");    }}

简单的controller请求

@RequestMapping("/message/{currentPage}")public String message(@PathVariable("currentPage") Integer currentPage, Model model){    if(currentPage!= null){        PageHelper.startPage(currentPage, 11);    }    LOGGER.debug("程序执行的时候输出Log日志...");    List<Message> messages = messageService.list();    model.addAttribute("messages", messages);    return "message";}

测试效果

这里写图片描述

0 0
原创粉丝点击