SpringBoot整合+slf4j+log4j2,log4j2.xml配置为什么不生效?
如题,我在log4j2.xmlli设置的PatternLayout不生效,我猜测应该使用的是默认的配置,但是我反复检查都没有找出问题,请大神帮忙,谢谢了!
pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.10</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>BaseProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>BaseProject</name>
<description>BaseProject</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<exclusions>
<!-- 去除旧log依赖 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.projectlombok</groupId>-->
<!-- <artifactId>lombok</artifactId>-->
<!-- <optional>true</optional>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
<configuration>
<!--指定GeneratorConfig.xml路径,这里放入项目根路径,和pom.xml同级-->
<configurationFile>GeneratorConfig.xml</configurationFile>
<verbose>true</verbose>
<!--是否覆盖原文件,Mapper.xml不会覆盖-->
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
</project>
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?><configuration status="debug" monitorInterval="30">
<!-- 先定义所有的appender -->
<appenders>
<!-- 这个输出控制台的配置 -->
<Console name="Console" target="SYSTEM_OUT">
<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 这个都知道是输出日志的格式 -->
<PatternLayout pattern="aaaaaa[%d{HH:mm:ss.SSS}] [%-5p] %l - %m%n"/>
</Console>
<!-- 文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 -->
<!-- append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->
<File name="log" fileName="log/test.log" append="false">
<PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-5p] %l - %m%n"/>
</File>
<!-- 添加过滤器ThresholdFilter,可以有选择的输出某个级别以上的类别 onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否则直接拒绝 -->
<File name="ERROR" fileName="logs/error.log">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{yyyy.MM.dd 'at' HH:mm:ss z}] [%-5p] %l - %m%n"/>
</File>
<!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
<RollingFile name="RollingFile" fileName="logs/web.log"
filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout pattern="[%d{yyyy-MM-dd 'at' HH:mm:ss z}] [%-5p] %l - %m%n"/>
<SizeBasedTriggeringPolicy size="2MB"/>
</RollingFile>
</appenders>
<!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
<loggers>
<!-- 过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.springframework" level="INFO"></logger>
<logger name="org.mybatis" level="INFO"></logger>
<!-- 建立一个默认的root的logger -->
<root level="trace">
<appender-ref ref="RollingFile"/>
<appender-ref ref="Console"/>
<appender-ref ref="ERROR" />
<appender-ref ref="log"/>
</root>
</loggers>
</configuration>
application.properties
#jdbcspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db1
spring.datasource.username=root
spring.datasource.password=123456
#mybatis.type-aliases-package=com.example.parentdemo.entity
mybatis.mapper-locations=classpath:/mapper/*.xml
测试方法
package com.example.baseproject.controller;import com.example.baseproject.mapper.UserMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private UserMapper userMapper;
@RequestMapping("logtest")
public void getUser() {
Logger logger = LoggerFactory.getLogger(this.getClass());
logger.debug("debug log");
logger.trace("trace log");
logger.info("info log");
logger.warn("warn log");
logger.error("error log");
}
}
console输出
"C:\Program Files\Java\jdk1.8.0_351\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.3.3\lib\idea_rt.jar=53920:C:\Program Files\JetBrains\IntelliJ IDEA 2022.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_351\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_351\jre\lib\rt.jar;D:\MyData\JavaData\WorkSpace\idea-projects\slf4j-log4j2-demo\target\classes;D:\localRepository\org\springframework\boot\spring-boot-starter-web\2.7.10\spring-boot-starter-web-2.7.10.jar;D:\localRepository\org\springframework\boot\spring-boot-starter\2.7.10\spring-boot-starter-2.7.10.jar;D:\localRepository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\localRepository\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;D:\localRepository\org\springframework\boot\spring-boot-starter-json\2.7.10\spring-boot-starter-json-2.7.10.jar;D:\localRepository\com\fasterxml\jackson\core\jackson-databind\2.13.5\jackson-databind-2.13.5.jar;D:\localRepository\com\fasterxml\jackson\core\jackson-annotations\2.13.5\jackson-annotations-2.13.5.jar;D:\localRepository\com\fasterxml\jackson\core\jackson-core\2.13.5\jackson-core-2.13.5.jar;D:\localRepository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.5\jackson-datatype-jdk8-2.13.5.jar;D:\localRepository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.5\jackson-datatype-jsr310-2.13.5.jar;D:\localRepository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.5\jackson-module-parameter-names-2.13.5.jar;D:\localRepository\org\springframework\boot\spring-boot-starter-tomcat\2.7.10\spring-boot-starter-tomcat-2.7.10.jar;D:\localRepository\org\apache\tomcat\embed\tomcat-embed-core\9.0.73\tomcat-embed-core-9.0.73.jar;D:\localRepository\org\apache\tomcat\embed\tomcat-embed-el\9.0.73\tomcat-embed-el-9.0.73.jar;D:\localRepository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.73\tomcat-embed-websocket-9.0.73.jar;D:\localRepository\org\springframework\spring-web\5.3.26\spring-web-5.3.26.jar;D:\localRepository\org\springframework\spring-beans\5.3.26\spring-beans-5.3.26.jar;D:\localRepository\org\springframework\spring-webmvc\5.3.26\spring-webmvc-5.3.26.jar;D:\localRepository\org\springframework\spring-aop\5.3.26\spring-aop-5.3.26.jar;D:\localRepository\org\springframework\spring-context\5.3.26\spring-context-5.3.26.jar;D:\localRepository\org\springframework\spring-expression\5.3.26\spring-expression-5.3.26.jar;D:\localRepository\org\springframework\boot\spring-boot-starter-log4j2\2.7.10\spring-boot-starter-log4j2-2.7.10.jar;D:\localRepository\org\apache\logging\log4j\log4j-slf4j-impl\2.17.2\log4j-slf4j-impl-2.17.2.jar;D:\localRepository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;D:\localRepository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;D:\localRepository\org\apache\logging\log4j\log4j-core\2.17.2\log4j-core-2.17.2.jar;D:\localRepository\org\apache\logging\log4j\log4j-jul\2.17.2\log4j-jul-2.17.2.jar;D:\localRepository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;D:\localRepository\org\mybatis\spring\boot\mybatis-spring-boot-starter\2.3.0\mybatis-spring-boot-starter-2.3.0.jar;D:\localRepository\org\springframework\boot\spring-boot-starter-jdbc\2.7.10\spring-boot-starter-jdbc-2.7.10.jar;D:\localRepository\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;D:\localRepository\org\springframework\spring-jdbc\5.3.26\spring-jdbc-5.3.26.jar;D:\localRepository\org\springframework\spring-tx\5.3.26\spring-tx-5.3.26.jar;D:\localRepository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\2.3.0\mybatis-spring-boot-autoconfigure-2.3.0.jar;D:\localRepository\org\mybatis\mybatis\3.5.11\mybatis-3.5.11.jar;D:\localRepository\org\mybatis\mybatis-spring\2.1.0\mybatis-spring-2.1.0.jar;D:\localRepository\org\springframework\boot\spring-boot-starter-actuator\2.7.10\spring-boot-starter-actuator-2.7.10.jar;D:\localRepository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.7.10\spring-boot-actuator-autoconfigure-2.7.10.jar;D:\localRepository\org\springframework\boot\spring-boot-actuator\2.7.10\spring-boot-actuator-2.7.10.jar;D:\localRepository\io\micrometer\micrometer-core\1.9.9\micrometer-core-1.9.9.jar;D:\localRepository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;D:\localRepository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;D:\localRepository\org\springframework\boot\spring-boot-devtools\2.7.10\spring-boot-devtools-2.7.10.jar;D:\localRepository\org\springframework\boot\spring-boot\2.7.10\spring-boot-2.7.10.jar;D:\localRepository\org\springframework\boot\spring-boot-autoconfigure\2.7.10\spring-boot-autoconfigure-2.7.10.jar;D:\localRepository\com\mysql\mysql-connector-j\8.0.32\mysql-connector-j-8.0.32.jar;D:\localRepository\org\springframework\spring-core\5.3.26\spring-core-5.3.26.jar;D:\localRepository\org\springframework\spring-jcl\5.3.26\spring-jcl-5.3.26.jar;D:\localRepository\org\mybatis\generator\mybatis-generator-core\1.3.7\mybatis-generator-core-1.3.7.jar" com.example.baseproject.BaseProjectApplication . ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.10)
2023-04-05 17:59:09.705 INFO 26460 --- [ restartedMain] c.e.b.BaseProjectApplication : Starting BaseProjectApplication using Java 1.8.0_351 on DESKTOP-OQ55J3D with PID 26460 (D:\MyData\JavaData\WorkSpace\idea-projects\slf4j-log4j2-demo\target\classes started by luqing in D:\MyData\JavaData\WorkSpace\idea-projects\slf4j-log4j2-demo)
2023-04-05 17:59:09.760 INFO 26460 --- [ restartedMain] c.e.b.BaseProjectApplication : No active profile set, falling back to 1 default profile: "default"
2023-04-05 17:59:09.840 INFO 26460 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2023-04-05 17:59:09.840 INFO 26460 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2023-04-05 17:59:11.577 INFO 26460 --- [ restartedMain] o.s.b.w.e.t.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-04-05 17:59:11.579 INFO 26460 --- [ restartedMain] o.a.c.c.AprLifecycleListener : Loaded Apache Tomcat Native library [1.2.36] using APR version [1.7.2].
2023-04-05 17:59:11.580 INFO 26460 --- [ restartedMain] o.a.c.c.AprLifecycleListener : APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
2023-04-05 17:59:11.580 INFO 26460 --- [ restartedMain] o.a.c.c.AprLifecycleListener : APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
2023-04-05 17:59:11.583 INFO 26460 --- [ restartedMain] o.a.c.c.AprLifecycleListener : OpenSSL successfully initialized [OpenSSL 1.1.1t 7 Feb 2023]
2023-04-05 17:59:11.595 INFO 26460 --- [ restartedMain] o.a.c.c.StandardService : Starting service [Tomcat]
2023-04-05 17:59:11.596 INFO 26460 --- [ restartedMain] o.a.c.c.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.73]
2023-04-05 17:59:11.689 INFO 26460 --- [ restartedMain] o.a.c.c.C.[.[.[/] : Initializing Spring embedded WebApplicationContext
2023-04-05 17:59:11.689 INFO 26460 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1848 ms
2023-04-05 17:59:12.755 INFO 26460 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
2023-04-05 17:59:12.761 INFO 26460 --- [ restartedMain] o.s.b.a.e.w.EndpointLinksResolver : Exposing 1 endpoint(s) beneath base path '/actuator'
2023-04-05 17:59:12.817 INFO 26460 --- [ restartedMain] o.s.b.w.e.t.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-04-05 17:59:12.835 INFO 26460 --- [ restartedMain] c.e.b.BaseProjectApplication : Started BaseProjectApplication in 3.809 seconds (JVM running for 5.464)
2023-04-05 17:59:13.262 INFO 26460 --- [)-192.168.255.1] c.z.h.HikariDataSource : HikariPool-1 - Starting...
2023-04-05 17:59:13.262 INFO 26460 --- [)-192.168.255.1] o.a.c.c.C.[.[.[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-04-05 17:59:13.263 INFO 26460 --- [)-192.168.255.1] o.s.w.s.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2023-04-05 17:59:13.266 INFO 26460 --- [)-192.168.255.1] o.s.w.s.DispatcherServlet : Completed initialization in 3 ms
2023-04-05 17:59:14.209 INFO 26460 --- [)-192.168.255.1] c.z.h.HikariDataSource : HikariPool-1 - Start completed.
2023-04-05 17:59:26.957 INFO 26460 --- [nio-8080-exec-2] c.e.b.c.UserController : info log
2023-04-05 17:59:26.958 WARN 26460 --- [nio-8080-exec-2] c.e.b.c.UserController : warn log
2023-04-05 17:59:26.958 ERROR 26460 --- [nio-8080-exec-2] c.e.b.c.UserController : error log
回答:
大概率还是默认的logback引用没有排除干净,所以log4j2的没生效
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId>
可以看一下maven的引用关系,找一下是谁引用了的,盲猜大概了是mybatis间接引了
<dependency> <groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
判断是否生效,也可以配置spring的log level到debug,然后看启动日志,具体有没有加载相关配置
以上是 SpringBoot整合+slf4j+log4j2,log4j2.xml配置为什么不生效? 的全部内容, 来源链接: utcz.com/p/945090.html