您的位置:首页 > 编程语言 > Java开发

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

2016-11-04 11:54 1426 查看

目录结构



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";
}


测试效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐