在log4j2.xml中,我有以下两个属性:
<Properties>
<Property name="log-path">logs</Property>
<Property name="bootstrap.servers" value="${bundle:application:app.kafkaBrokers}"></Property>
<Property name="fileName" value="${bundle:application:app.correctName}"></Property>
以下两个appender:
<Kafka name="Kafka" topic="logaggregation" >
<JSONLayout complete="false" compact="false" /> <PatternLayout pattern="%date %message" />
<Property name="bootstrap.servers">${bootstrap.servers}</Property>
</Kafka>
<RollingFile name="RollingFile" fileName="${fileName}"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="250 MB" />
</Policies>
</RollingFile>
kafkaAppender读取属性
bootstrap.servers
和Rolling文件读取属性
文件名
在我的src / main / resources中,我有以下application.properties文件:
app.kafkaBrokers=localhost:9092
app.correctName = log.txt的
在jar所在的文件夹中,我有另一个application.properties文件,其中包含以下内容:
app.kafkaBrokers =本地主机:9092 app.correctName = correct.log
现在,如果我使用java -jar运行,我的springboot jar log4j2不会从位于jar文件所在目录中的文件中获取该属性,如spring文档中所述here
事实是,如果我在我的主类中编写以下代码:
@PostConstruct
public void init() {
System.out.println(env.getProperty("app.kafkaBrokers") + " "
+ env.getProperty("app.correctName"));
}
我看到打印的正确值如“correct.log”但是log4j2仍未获取新值并使用“log.txt”
我怀疑是log4j2在spring实际选择正确的application.properties文件之前启动。 有什么想法吗?