目录

SpringBoot问题汇总

使用Log4j2日志替代默认的Logback

SpringBoot默认使用Logback打印日志,出于性能考虑想要改用Log4j2,需要修改POM中的依赖,移除默认的Logback依赖:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
 
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

获取请求的来源IP

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
RequestAttributes attributes = RequestContextHoider.getRequestAttributes();
if (attributes instanceof ServletRequestAttributes) {
    HttpServletRequest request =((ServletRequestAttributes) attributes).getRequest();
    String ipAddress = request.getHeader("X-Forwarded-For");
    if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
        ipAddress = request.getHeader("X-Real-IP");
    }
    if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
        ipAddress = request.getRemoteAddr();
    }
    // 处理多个IP的情况(例如:X-Forwarded-For: client, proxy1, proxy2)
    if (ipAddress != null && ipAddress.contains(",")) {
        ipAddress = ipAddress.split(",")[0].trim();
    }
}

参考链接