我想根据我的application.properties更改log4j2.xml文件中的一些属性,因此例如定义一些属性,然后在log4j2中替换那些作为参数的属性。
我跑了不同的方法,但我仍然没有做对。我想根据环境(DEV,QA或PROD)有不同的配置。有人可以指导我如何实现这个目标吗?
所以,我正试图在我的属性中使用它
#Place holders for log4j2.xml file
log.file.path=/opt/tomcat/logs
log.file.name=dummydummy
log.file.size=100 MB
log.level=DEBUG
请在下面找到我的log4j2示例...
<?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>
由于
答案 0 :(得分:9)
属性lookup元素允许从log4j配置中的外部属性文件中引用属性。 对于你的例子,它应该是这样的:
文件 env.properties 包含以下属性:
log.file.path=/opt/tomcat/logs
log.file.name=dummydummy
log.file.size=100 MB
log.level=DEBUG
属性查找应定义为 log4j2.xml 的属性:
<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>
现在可以使用$ {property_name}表示法在appender中引用属性。每个属性引用都将使用 env.properties 中的实际值进行插值。
您可以找到另一个属性查找示例here。
答案 1 :(得分:1)
从Log4j 2.13.0开始,Log4j 2现在提供Spring Lookup作为其Spring Cloud Config支持的一部分。它将允许您在log4j2.xml中引用Spring Boot应用程序的application.properties或application.yml文件中定义的属性。
答案 2 :(得分:0)
确保在类路径中添加log4j2 starter,然后在application.properties中删除与日志记录相关的属性,然后spring将从resources文件夹中加载log4j2.xml。 这样您就可以完全控制日志记录。如果您想替换值,请参阅this link
注意:: 如果项目中有执行器,则删除spring boot logger启动器
<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>