我是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"
但是,它还没有用......
答案 0 :(得分:0)
尝试将log4j2.xml放在war文件中的WEB-INF / classes /下。在这种情况下,无需在web.xml中配置位置。
更新:
对于Log4J-1.2,web.xml(log4jConfigLocation
)中指定的属性名称为,而不是Log4J2 。
Log4J2的正确属性名称为log4j.configurationFile
。 (尽管它的名称,它不仅接受文件,而且还理解classpath:
方案。)