Ich möchte einige Eigenschaften aus der Datei log4j2.xml in Abhängigkeit von meinen application.properties ändern. Definieren Sie also beispielsweise einige Eigenschaften und ersetzen Sie dann im log4j2 die Eigenschaften, die Parameter sind.
Ich habe verschiedene Ansätze verfolgt, aber immer noch nicht das Richtige. Ich möchte je nach Umgebung unterschiedliche Konfigurationen haben (DEV, QA oder PROD). Kann mich jemand anleiten, wie das zu erreichen ist?
Also versuche ich das in meinen Eigenschaften zu haben
#Place holders for log4j2.xml file
log.file.path=/opt/Tomcat/logs
log.file.name=dummydummy
log.file.size=100 MB
log.level=DEBUG
Hier finden Sie mein log4j2-Beispiel ...
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="PID">????</Property>
<property name="name">my-log</property>
</Properties>
<Appenders>
<RollingFile name="file" fileName="${log.file.path}${log.file}.log"
filePattern="${log.file.path}${log.file}-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${sys:PID} --- [%t] %c{1}(%M:%L) : %m%n%wEx" />
<Policies>
<TimeBasedTriggeringPolicy /><!-- Rotated everyday -->
<SizeBasedTriggeringPolicy size="${log.file.size}" /> <!-- Or every 100 MB -->
</Policies>
</RollingFile>
<Console name="Console" target="SYSTEM_OUT" follow="true">
<PatternLayout
pattern="%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{Magenta} %clr{---}{faint} %clr{[%t]}{faint} %clr{%c{1}(%M:%L)}{cyan} %clr{:}{faint} %m%n%wEx" />
</Console>
</Appenders>
<Loggers>
<Logger name="org.hibernate.validator.internal.util.Version"
level="warn" />
<Logger name="org.Apache.coyote.http11.Http11NioProtocol" level="warn" />
<Logger name="org.Apache.Tomcat.util.net.NioSelectorPool" level="warn" />
<Logger name="org.Apache.catalina.startup.DigesterFactory" level="error" />
<Logger name="org.springframework.web" level="error" />
<Root level="${log.level}">
<AppenderRef ref="Console" />
<AppenderRef ref="file" />
</Root>
</Loggers>
</Configuration>
Vielen Dank
Mit dem Properties-Lookup-Element können Eigenschaften aus einer externen Eigenschaftendatei in der log4j-Konfiguration referenziert werden. Für Ihr Beispiel sollte es ungefähr so aussehen:
Eine Datei env.properties enthält die folgenden Eigenschaften:
log.file.path=/opt/Tomcat/logs
log.file.name=dummydummy
log.file.size=100 MB
log.level=DEBUG
Die Eigenschaften-Suche sollte als Eigenschaften der Datei log4j2.xml definiert werden:
<Configuration>
<Properties>
<property name="log.file.path">${bundle:env:log.file.path}</property>
<property name="log.file.name">${bundle:env:log.file.name}</property>
<property name="log.file.size">${bundle:env:log.file.size}</property>
<property name="log.level">${bundle:env:log.level}</property>
</Properties>
Jetzt können die Eigenschaften in Appendern mit der Notation $ {property_name} referenziert werden. Jede Eigenschaftsreferenz wird mit dem realen Wert aus der Datei env.properties interpoliert.
Ein weiteres Beispiel für die Suche nach Eigenschaften finden Sie hier .
Stellen Sie sicher, dass der log4j2-Starter dem Klassenpfad hinzugefügt wurde, und entfernen Sie dann die protokollbezogenen Eigenschaften in application.properties. Spring lädt dann Ihre log4j2.xml aus dem Ressourcenordner. Auf diese Weise haben Sie die volle Kontrolle über die Protokollierung. Wenn Sie Werte ersetzen möchten, verweisen Sie auf diesen Link
Hinweis :: Wenn Sie einen Aktor in Ihrem Projekt haben, entfernen Sie den Starter des Spring Boot Loggers
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</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>