Spring mvc log4j2根级别不工作
我不熟悉log4j2,现在我已经初始化了log4j2并开始工作,但是我无法设置根记录器级别 我的项目是一个Java Web项目(我在windows7 x64上使用MyEclipse),我在Tomcat7.0.52中运行它 我在课堂上使用这个:Spring mvc log4j2根级别不工作,spring-mvc,log4j2,Spring Mvc,Log4j2,我不熟悉log4j2,现在我已经初始化了log4j2并开始工作,但是我无法设置根记录器级别 我的项目是一个Java Web项目(我在windows7 x64上使用MyEclipse),我在Tomcat7.0.52中运行它 我在课堂上使用这个: log.trace("Here is some TRACE"); log.debug("Here is some DEBUG"); log.info("Here is some INFO"); log.warn("Here
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确实找到了配置文件:
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
,我用谷歌搜索了一下系统属性
以前,我确实在log4j2中读过关于自动化配置会话的内容,但我不太了解系统属性
,所以我忽略了它
我仍然不确定
和系统属性之间的关系,所以我尝试了以下方法:
<context-param>
<param-name>log4j.configurationFile</param-name>
<param-value>classpath:/path/to/a/package/log4j2.xml</param-value>
</context-param>
log4j.configurationFile
classpath:/path/to/a/package/log4j2.xml
那不行
其次,我尝试将-Dlog4j.configurationFile=“CLASSPATH:/path/to/a/package/log4j2.xml”
添加到tomcat的启动选项中,这应该是可行的,但仍然不行
我发现我的问题和它一样
也许configurationFile不支持类路径
表示法,所以我尝试使用绝对路径
-Dlog4j.configurationFile=“F:\MySpace\myproject\src\foo\blablabla\resource\log4j2.xml”
但是,它仍然不起作用。尝试将log4j2.xml放在war文件的WEB-INF/classes/下。在这种情况下,不需要在web.xml中配置位置
更新:
web.xml(log4jconfig
)中指定的属性名称是针对Log4J-1.2的,而不是针对Log4J2的
Log4J2的正确属性名是log4j.configurationFile
。(尽管名称不同,它不仅接受文件,还理解类路径:
scheme。)我知道如果我把log4j2.xml
放在WEB-INF/classes/
或src
中就可以了。但奇怪的是,日志显示它确实从我配置的地方读取了配置,但没有任何效果。嗯。。。它可能会说它正在尝试从classpath:/path/to/a/package/log4j2.xml
初始化。如果在那个位置找不到任何东西,它应该报告一个明显的错误。顺便说一句,我过去也遇到过类似的问题:如果删除初始斜杠并使用classpath:path/to/a/package/log4j2.xml
,会怎么样?我认为这与初始斜杠无关,我还有其他条目与初始斜杠有关,它们工作正常。虽然我尝试通过删除初始斜杠来向您提供建议,但它不起作用。classpath:path
表示法支持位置,但必须是小写。提示:您可以通过将配置更改为以
开头来检查Log4J2是否找到Log4J2.xml配置文件。一旦log4j2找到log4j2.xml文件,就会将log4j2内部日志打印到控制台(示例中的Tomcat控制台)。Tip2:通过设置系统属性-Dlog4j2.StatusLogger.level=TRACE
启用内部log4j状态记录器。这将把log4j2初始化的详细信息打印到控制台。它可能会提示出哪里出了问题。。。
<context-param>
<param-name>log4j.configurationFile</param-name>
<param-value>classpath:/path/to/a/package/log4j2.xml</param-value>
</context-param>