2015-09-04 100 views
1

可能我搜索了所有的互联网,但我必须错过一些东西。Log4j2没有看到配置xml

我根据文档配置Log4j2和Commons-logging。我添加了log4j2.xml,但其配置没有影响应用程序输出。我看起来像Log4j不读这个文件。下面是我的配置:

的pom.xml

<properties> 
    <log4j2.version>2.3</log4j2.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging</artifactId> 
     <version>1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
     <version>${log4j2.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>${log4j2.version}</version> 
    </dependency> 
</dependencies> 

的\ src \主\资源\ log4j2.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="TRACE"> 

    <Properties> 
     <Property name="filename">fileName</Property> 
    </Properties> 

    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="Pattern Pattern %d{DEFAULT} %-5level %t : %logger{1} - %m%n"/> 
     </Console> 
     <RollingFile name="RollingFile" 
        fileName="${filename}.log" 
        filePattern="${filename}-%d{yyyy-MM-dd}.log"> 
      <PatternLayout pattern="%d{DEFAULT} %-5level %t : %logger{1} - %m%n"/> 
      <TimeBasedTriggeringPolicy/> 
     </RollingFile> 
    </Appenders> 

    <Loggers> 
     <Logger name="com.mydomain" level="TRACE"/> 
     <Root level="TRACE"> 
      <AppenderRef ref="Console"/> 
      <AppenderRef ref="RollingFile"/> 
     </Root> 
    </Loggers> 
</Configuration> 

在任何类 - 例如A级

private static final Log logger = LogFactory.getLog(A.class); 

应用程序具有main()函数,因此可以由IDE或mvn exec:java运行。

问题:

记录工作 - 但默认的方式。

正如你可以log4j2.xml文件中看到我改变水平TRACE和模式I型:Pattern Pattern检查log4j2使用我的自定义配置。

logger.trace()出现。没有文字Pattern Pattern。控制台中没有来自log4j的错误/警告。

请帮忙,告诉我我做错了什么?

编辑:

@BrunoMarcoVisioli告诉我使用org.apache.logging.log4j.LogManager,而不是LogFactory。所以,我在main()方法中添加新的记录:

private static final Logger logger_new = LogManager.getLogger(CalculationApp.class); 

并通过这个logger_new登录工作正常,所以我设置TRACE水平,我也看到了一些日志,应用程序启动时,第一:

Starting configuration XmlConfiguration[location=target\classes\log4j2.xml] 

但记录通过LogFactory仍然不起作用。

+1

在应用程序的类路径中是\ src \ main \ resources \? –

+0

@布鲁诺Marco Visioli:是的。在那个目录之前是一个log4j.properties文件,用于配置较旧的Log4j。而且,当我做'jar'文件log4j2。xml在里面。这是否足够证明? – jsosnowski

+0

如果可能的话,尽管可以使用'org.apache.logging.log4j.LogManager'而不是来自commons-logging的LogFactory,即使它可以工作。 –

回答

4

您需要将log4j-jcl依赖项添加到您的POM,它将作为commons-logging和log4j2之间的桥梁。

-1

它通常与该文件所在的问题..

从文档

默认的Log4j会在classpath中一个名为log4j2.xml配置文件(没有的log4j.xml)。

+0

我使用'log4j2.xml'。这包括在问题中。 – jsosnowski