如何从log4j.xml的.properties文件中获取动态值

时间:2014-12-11 14:06:23

标签: java xml spring logging log4j

我正在使用log4j.xml文件。我有两个环境,即live&测试。测试和实时的log4j的唯一区别是级别(INFO-live,DEBUG-test)。所以我为两个env保留了常用的log4j.xml,并将该级别设为value = $ {loglevel}。我已经定义了包含loglevel=INFO的单独的live-log4j.properties。同样也用于测试。我的想法是,如果我为live构建jar,应该从live-log4j.properties文件中选择loglevel。如果是测试版本,则从test-log4j.properties开始。

我的查询是,我做对了吗? log4j.xml会从相应的* .properties文件中选择值吗?

我正在使用spring框架。我已经提到了很多东西,但没有任何相关内容。 我在spring.xml中添加了这些属性文件(不确定它是否有效) 我没有客户端连接来测试这个应用程序。

我的log4j版本:log4j 1.x

1 个答案:

答案 0 :(得分:3)

以下是解释如何:log4j configuration in applicationContext - forum.spring.io

的帖子

你可以简化那个

的applicationContext.xml:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>test-log4j.properties</value>
            <value>live-log4j.properties</value>
        </list>
    </property>
</bean>

<bean id="log4jDirectConfigurer" class="my.commons.logging.Log4jDirectConfigurer">
    <property name="location" value="classpath:log4j.xml"/>
    <property name="loglevelValue" value="${logging.level}"/>
</bean>

Log4jDirectConfigurer.java:

package my.commons.logging;

import java.io.FileNotFoundException;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Log4jConfigurer;

public class Log4jDirectConfigurer implements InitializingBean 
{
    private String location;
    private String loglevelKey = "webapp.logLevel";

    public void setLocation( String location ){
        this.location = location;
    }

    public void setLoglevelValue( String loglevel ){
        String value = System.getProperty( loglevelKey );
        System.setProperty( loglevelKey, loglevel );
    }

    public void afterPropertiesSet() {
        if( location == null ){
            return;
        }

        try {
            Log4jConfigurer.initLogging( location );
        } catch (FileNotFoundException e) {
            System.out.println(location + ": File not found");
        }
    }
}

的log4j.xml:

<root>
    <level value="${webapp.logLevel}" />
</root>

live-log4j.properties:

logging.level=INFO

测试log4j.propertie:

logging.level=DEBUG