log4j2根级别无法正常工作

时间:2014-02-24 07:48:40

标签: spring-mvc log4j2

我是log4j2的新手,现在我已经初始化了log4j2并且正在工作但我无法设置root logger级别。

我的项目是一个Java Web项目(我在windows7 x64上使用MyEclipse),我在Tomcat 7.0.52中运行它。

我在课堂上使用它:

    log.trace("Here is some TRACE");
    log.debug("Here is some DEBUG");
    log.info("Here is some INFO");
    log.warn("Here is some WARN");
    log.error("Here is some ERROR");
    log.fatal("Here is some FATAL");

只得到错误和致命的消息,根据文档,我认为是log4j2的默认设置。这意味着我自己的配置无效。

我的log4j2.xml为:

<?xml version="1.0" encoding="UTF-8"?>  
<configuration status="OFF">  
  <appenders>  
    <Console name="Console" target="SYSTEM_OUT">  
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
    </Console>
    <File name="File" fileName="logs/example.log">
         <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>  
  </appenders>  
  <loggers>  

    <root level="debug">  
      <appender-ref ref="Console"/>  
      <appender-ref ref="File"/>  
    </root>  
  </loggers>  
</configuration>

我的log4j2.xml文件已放在包下,我将web.xml配置为:

  <context-param>
    <param-name>log4jConfigLocation</param-name>
      <param-value>classpath:/path/to/a/package/log4j2.xml</param-value>
  </context-param>

   <context-param>
    <param-name>log4jRefreshInterval</param-name>
    <param-value>60000</param-value>
   </context-param>

 <listener>
  <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
 </listener>

根据部署日志,我认为log4j2确实找到了配置文件:

INFO: Initializing log4j from [classpath:/path/to/a/package/log4j2.xml]
INFO 24, 2014 3:37:34  org.apache.catalina.core.ApplicationContext log
INFO: Log4jServletContextListener ensuring that Log4j starts up properly.
INFO 24, 2014 3:37:34  org.apache.catalina.core.ApplicationContext log
INFO: Log4jServletFilter initialized.

你能帮忙找出问题所在吗?

感谢@Remko提及log4j.configurationFile,我稍微谷歌了解system property

以前,我确实在log4j2的documentation中读到过自动化配置会话,但我不太了解system property,所以我忽略了它。

我仍然不确定<context-param>system property之间的关系,所以我尝试了这个:

<context-param>
  <param-name>log4j.configurationFile</param-name>
  <param-value>classpath:/path/to/a/package/log4j2.xml</param-value>
</context-param>  

不起作用。

其次我尝试将-Dlog4j.configurationFile="CLASSPATH:/path/to/a/package/log4j2.xml"添加到tomcat的启动选项中,这应该可行,但它仍然没有。

我发现我的问题与this

相同

也许configurationFile不支持CLASSPATH表示法,所以我尝试使用绝对路径 -Dlog4j.configurationFile="F:\MySpace\myproject\src\foo\blabla\resource\log4j2.xml"

但是,它还没有用......

1 个答案:

答案 0 :(得分:0)

尝试将log4j2.xml放在war文件中的WEB-INF / classes /下。在这种情况下,无需在web.xml中配置位置。


更新: 对于Log4J-1.2,web.xml(log4jConfigLocation)中指定的属性名称为,而不是Log4J2

Log4J2的正确属性名称为log4j.configurationFile。 (尽管它的名称,它不仅接受文件,而且还理解classpath:方案。)