Spring - 为什么不使用log4j2 XML配置文件?

时间:2013-06-30 19:46:03

标签: java xml spring configuration log4j2

我使用Log4j ver之前的时间。 1在Spring应用程序中。我使用类似的东西来定义log4j.properties配置文件所在的位置:

PropertyConfigurator.configure(Foo.class.getResourceAsStream("log4j.properties"));

现在我切换到Log4j ver。 2,我有一个XML配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >
    <appenders>    
        <appender name="DB" class="org.apache.log4j.jdbc.JDBCAppender">
            <param name="url" value="jdbc:postgresql://hostname/db"/>
            <param name="driver" value="org.postgresql.Driver"/>
            <param name="user" value="postgres"/>
            <param name="password" value="pwd"/>
            <param name="sql" value="INSERT INTO logs (logger, log_level, message) VALUES('%l','%p','%m')"/>
            <layout class="org.apache.log4j.PatternLayout"></layout>
        </appender>
        <appender name="CA" class="org.apache.log4j.ConsoleAppender">
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
            </layout>
        </appender>
    </appenders> 
    <loggers>
        <root level="trace">
            <appender-ref ref="CA" level="debug"/>
            <appender-ref ref="DB" level="info"/>
        </root>
    </loggers>
</log4j:configuration>

但Spring似乎没有使用此文件,并且日志记录未附加到控制台或数据库中。

public class Foo {

    Logger LOG = LogManager.getLogger(Foo.class);

    public void init() {

        System.out.println("START...");

        LOG.info("INFO");
        LOG.debug("DEBUG");

        System.out.println("END...");

    }
}

这是输出:

run:
VI 30, 2013 9:36:16 ODP. org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2548ccb8: startup date [Sun Jun 30 21:36:16 CEST 2013]; root of context hierarchy
VI 30, 2013 9:36:16 ODP. org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [foo/applicationContext.xml]
VI 30, 2013 9:36:16 ODP. org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@21e9c99c: defining beans [taskMaker]; root of factory hierarchy
START...
END...
BUILD SUCCESSFUL (total time: 1 second)

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您提供的配置XML使用log4j-1.x语法。 Log4j-2.0配置文件不同。请访问网站以获取示例。

接下来,log4j-2.0将在类路径中查找log4j2.xml。 如果要指定位置,请使用系统属性

启动进程
-Dlog4j.configurationFile=path/to/log4j2.xml

答案 1 :(得分:0)

我正在使用gradle,发现logback / slf4j传递依赖关系正在阻碍我。要删除它们,我包括:

configurations {
    all*.exclude module: 'log4j-over-slf4j'
    all*.exclude group: 'ch.qos.logback'
}

在我的gradle构建文件中。