如何使用spring boot 1.3.6.RELEASE使log4j2可以通过环境进行配置

时间:2016-08-09 20:05:21

标签: properties spring-boot log4j2

我想根据我的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>

由于

3 个答案:

答案 0 :(得分:9)

属性lookup元素允许从log4j配置中的外部属性文件中引用属性。 对于你的例子,它应该是这样的:

  1. 文件 env.properties 包含以下属性:

    log.file.path=/opt/tomcat/logs
    log.file.name=dummydummy
    log.file.size=100 MB
    log.level=DEBUG
    
  2. 属性查找应定义为 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>