springboot中如何使用log4j制作统一的请求日志呢?
转自:
http://www.java265.com/JavaCourse/202201/2144.html
下文笔者讲述springboot中使用log4j处理请求日志的方法分享,如下所示:
在日常项目中,我们经常需为一个项目制作一个统一的请求日志处理器, 实时监控项目的进出信息,那么springboot如何制作一个统一的日志请求处理呢? 下文将一一道来,如下所示:
步骤一、springboot集成log4j
springboot配置集成log4j
步骤二、导入AOP依赖
<!-- AOP --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
WebLogAspect切面类
@Aspect @Component//配置bean public class WebLogAspect { private Logger logger = Logger.getLogger(getClass()); @Pointcut("execution(public * com.java265.controller..*.*(..))") public void webLog() { } @Before("webLog()") public void doBefore(JoinPoint joinPoint) throws Throwable { // 接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); // 记录下请求内容 logger.info("---------------request----------------"); logger.info("URL : " + request.getRequestURL().toString()); logger.info("HTTP_METHOD : " + request.getMethod()); logger.info("IP : " + request.getRemoteAddr()); Enumerationenu = request.getParameterNames(); while (enu.hasMoreElements()) { String name = (String) enu.nextElement(); logger.info("name:" + name + " - value:" + request.getParameter(name)); } } @AfterReturning(returning = "ret", pointcut = "webLog()") public void doAfterReturning(Object ret) throws Throwable { logger.info("---------------response----------------"); // 处理完请求,返回内容 logger.info("RESPONSE : " + ret); logger.info("花费时间 : " + (System.currentTimeMillis() - startTime.get()) + "毫秒"); } }
使用@Pointcut定义切入点 此处是com.java265.controller包下的所有Controller 对controller层所有请求处理做切入点 然后通过@Before实现对请求内容的日志记录 最后通过@AfterReturning记录请求返回的对象 采用以上的方式,可以为所有的controller加上运行日志