好吧,我有 3 个 Spring 配置文件:开发、生产、测试,我想在不同的配置文件中使用不同的 log4j2 配置。我检查了弹簧引导参考,并按照它所说的方式进行操作。但是当我运行 spring 应用程序时,我只得到下面的日志:
2018-03-05 09:52:32,194 main ERROR Error processing element SpringProfile ([Configuration: null]): CLASS_NOT_FOUND
2018-03-05 09:52:32,194 main ERROR Error processing element SpringProfile ([Configuration: null]): CLASS_NOT_FOUND
我用谷歌搜索并堆叠了错误日志,但仍然找不到为什么springProfile
标签不起作用的答案。
这是我的log4j2-spring.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<SpringProfile name="prod">
<Appenders>
<RollingFile name="RollingFile"
fileName="/home/prod/service.log"
filePattern="/home/prod/service.log.%d{yyyyMMddHH}"
append="true">
<PatternLayout pattern="[%level][%d{yyyy-MM-dd'T'HH:mm:ss.SSSXX}][%l] %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</SpringProfile>
<SpringProfile name="!prod">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%level][%d{yyyy-MM-dd'T'HH:mm:ss.SSSXX}][%l] %msg%n" />
</Console>
<File name="File" fileName="./logs/service.log" append="false">
<PatternLayout pattern="[%level][%d{yyyy-MM-dd'T'HH:mm:ss.SSSXX}][%l] %msg%n" />
</File>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="File"/>
<!--When WIP, you could uncomment the next line to show log to console.-->
<!--<AppenderRef ref="Console"/>-->
</Root>
</Loggers>
</SpringProfile>
</Configuration>
项目中缺少对 Log4J2 的 spring 引导支持的依赖关系。您需要添加 org.apache.logging.log4j:log4j-spring-boot。将其添加为依赖项将启用 SpringProfile
标记的使用。(此功能从版本 2.15.0 开始可用(
有人可能会认为这是Spring Boot Log4J2集成的错误。
Apache Log4J2 和 Spring Framework 之间没有关系(或者至少我不知道(。
您使用的SpringProfile
标记在 Log4J2 的 XML 架构中也不存在。
您必须使用不同的弹簧配置文件配置和不同的 Log4J2 配置。另一方面,Logback 和 Log4J2 是(几乎完全(不同的库,用于相同的日志记录目的。
你必须添加
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-spring-boot</artifactId>
</dependency>