SpringBoot (七) 日志管理logback、log4j、AOP统一web 请求日志
创始人
2025-05-31 08:53:19

文章目录

    • 前言
    • 1 日志级别
    • 2 使用logback记录日志
      • 2.1 Maven依赖
      • 2.2 application.yml
      • 2.3 logback.xml配置文件
      • 2.4 Java后端
      • 2.5 lombok
    • 3 使用 log4j 记录日志
      • 3.1 log4j 配置文件
      • 3.2 Maven依赖
      • 3.3 application.yml
      • 3.4 Java
    • 4 使用AOP统一处理 web 请求日志
      • 4.1 Maven依赖
      • 4.2 拦截日志类WebLogAspect.java

前言

1 日志级别

哈喽,大家好,我是[有勇气的牛排](全网同名)🐮🐮🐮

有问题的小伙伴欢迎在文末[评论,点赞、收藏]是对我最大的支持!!!。

官网:https://www.couragesteak.com/

ALL 最低等级的,用于打开所有日志记录。

TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。

DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。

INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。

WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示

ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。

FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。

OFF 最高等级的,用于关闭所有日志记录。

2 使用logback记录日志

2.1 Maven依赖


org.projectlomboklombok

2.2 application.yml

server:port: 8080# 指定读取logback配置文件
logging:config: classpath:log/logback.xml

2.3 logback.xml配置文件

/resources/logback.xml

%d %p (%file:%line\)- %m%nUTF-8log/file/fileLog.loglog/file/fileLog.log.%d.%i64 MB%d %p (%file:%line\)- %m%nUTF-8log/sql/sqlFile.loglog/sql/sqlFile.log.%d.%i64 MB%d %p (%file:%line\)- %m%nUTF-8log/error/errorFile.loglog/error/errorFile.%d.log.%i64 MB%d %p (%file:%line\)- %m%nUTF-8ERRORACCEPTDENY

2.4 Java后端

/** @Author  : 有勇气的牛排* @FileName: MyIndex.java* desc     :* */package com.couragesteak.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.logging.Logger;@RestController
@Slf4j
public class MyIndex {//    private static Logger log = Logger.getLogger(MyIndex.class);// http://127.0.0.1:8080/getInfo?name=cs&age=22@RequestMapping("/getInfo")public String getInfo(String name, int age) {log.info("===============");log.info("name: {}, age: {}", name, age);return name;}}

2.5 lombok

如果idea没有状lombok插件,则需要再类中添加如下代码,才能使用此日志功能。

private static Logger log = Logger.getLogger(String.valueOf(MyIndex.class));

image.png

3 使用 log4j 记录日志

机制:如果一条日志信息的级别 >= 配置文件的级别,就记录。

trace:追踪,就是程序推进一下,可以写个trace输出
debug:调试,一般作为最低级别,trace基本不用。
info:输出重要的信息,使用较多
warn:警告,有些信息不是错误信息,但也要给程序员一些提示。
error:错误信息。用的也很多。
fatal:致命错误。
输出源
CONSOLE(输出到控制台)
FILE(输出到文件)
格式
SimpleLayout:以简单的形式显示
HTMLLayout:以HTML表格显示
PatternLayout:自定义形式显示

3.1 log4j 配置文件

log4j.properties

#log4j.rootLogger=CONSOLE,info,error,DEBUG
log4j.rootLogger=DEBUG,error,CONSOLE,info
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender     
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout     
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n    log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout     
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold = info   
log4j.appender.info.append=true
log4j.appender.info.File=E:/code/log/info.loglog4j.logger.error=error  
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout     
log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold = error   
log4j.appender.error.append=true
log4j.appender.error.File=E:/code/log/error.loglog4j.logger.DEBUG=DEBUG
log4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DEBUG.layout=org.apache.log4j.PatternLayout     
log4j.appender.DEBUG.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.DEBUG.datePattern='.'yyyy-MM-dd
log4j.appender.DEBUG.Threshold = DEBUG   
log4j.appender.DEBUG.append=true
log4j.appender.DEBUG.File=E:/code/log/dubug.log

3.2 Maven依赖


org.springframework.bootspring-boot-starterorg.springframework.bootspring-boot-starter-logging
org.projectlomboklombok

org.springframework.bootspring-boot-starter-log4j1.3.8.RELEASE

3.3 application.yml

server:port: 8083logging:# 指定log4j.properties配置文件路径config: classpath:log4j.properties

3.4 Java

private static final Logger log = Logger.getLogger(String.valueOf(MyIndex.class));

4 使用AOP统一处理 web 请求日志

在方法前后实现拦截,减少代码打印日志代码冗余。

4.1 Maven依赖

org.springframework.bootspring-boot-starter-aop

4.2 拦截日志类WebLogAspect.java

/** @Author  : 有勇气的牛排* @FileName: WebLogAspect.java* desc     :* */package com.couragesteak.aop;import lombok.extern.slf4j.Slf4j;
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.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;/*** 定义一个切面,拦截包*/@Aspect
@Component
@Slf4j
public class WebLogAspect {//    private static final log logger = logFactory.getlog(WebLogAspect.class);/*** com.couragesteak.controller下所有类* *:所有方法* (..): 所有参数*/@Pointcut("execution(public * com.couragesteak.controller.*.*(..))")public void webLog() {}/*** 前置通知:请求前拦截*/@Before("webLog()")public void doBefore(JoinPoint joinPoint) throws Throwable {// 接收到请求,记录请求内容ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 记录下请求内容log.info("URL : " + request.getRequestURL().toString());log.info("HTTP_METHOD : " + request.getMethod());log.info("IP : " + request.getRemoteAddr());Enumeration enu = request.getParameterNames();while (enu.hasMoreElements()) {String name = (String) enu.nextElement();log.info("name:{},value:{}", name, request.getParameter(name));}}/*** 打印目标方法响应信息* */@AfterReturning(returning = "ret", pointcut = "webLog()")public void doAfterReturning(Object ret) throws Throwable {// 处理完请求,返回内容log.info("RESPONSE : " + ret);}
}

image.png

原文地址:https://www.couragesteak.com/article/293

相关内容

热门资讯

(独家揭秘)“ 中至余干麻将 ... 您好:中至余干麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【3716361】很多玩家在这款...
今日重大通报“中至南昌麻将确实... 亲:中至南昌麻将这款游戏是可以开挂的,确实是有挂的,添加客服【3671900】很多玩家在这款游戏中怀...
分享实测“新战皇大厅能不能开透... 您好:新战皇大厅这款游戏可以开挂,确实是有挂的,需要软件加微信【4770480】,很多玩家在新战皇大...
2025﹛终于出现﹜“陕西欢喜... 您好:陕西欢喜麻将,这款游戏可以开挂,确实是有挂的,需要软件加微信【3847338】或【953252...
给大家科普一下!微信小程序掼蛋... 您好:微信小程序掼蛋这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9307068】很多玩家在这...