我现在花了几个小时试图解决这个问题并完全失败。我发现新配置过程不必要地复杂。
我有一个带有web.xml文件的Servlet,其中包含以下内容:
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>file:///etc/myApp/log4j2.xml</param-value>
</context-param>
它似乎没有任何效果。我使用的是Tomcat 7.0.42,我已经删除了catalina.properties文件中对log4j * .jar的所有引用。我的应用程序中的日志仍在发送,但它们只是被发送到System.out而没有我指定的格式。
所以,我试着亲自手工完成:
InputStream in =
new FileInputStream(new File("/etc/myApp/log4j2.xml"));
ConfigurationSource source = new ConfigurationSource(in);
ConfigurationFactory factory = new XMLConfigurationFactory();
Configuration configuration = factory.getConfiguration(source);
LoggerContext context = (LoggerContext) LogManager.getContext();
context.start(configuration);
context.updateLoggers();
Logger.getLogger("Test").log(Level.INFO, "This is a logging message.");
首先,这似乎完全令人费解。显然,存在一些代码,它们将通过“log4jConfiguration”属性搜索不同的文件并根据它们的扩展来假设文件类型,那么为什么LogManger.reconfigure(String)
不具有相同的效果?
其次,这也没有效果。同样,日志将打印到System.out,并且没有执行任何请求的格式化。
以下是我的log4j2.xml的内容:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="LogFile" fileName="/var/log/myApp/myApp.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %p %c{1.} [%t] %m%n"/>
</File>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Console" level="DEBUG"/>
<AppenderRef ref="LogFile" level="DEBUG"/>
</Root>
</Loggers>
</Configuration>
两种情况下的输出都是:
Dec 03, 2013 6:06:45 PM test.Test main
INFO: This is a logging message.
提前致谢,
约翰
编辑:这实际上是有效的。看来我失踪了,“log4j-jcl-2.0-beta9.jar”。如果上面的“上下文参数”不起作用,Remko Popma的答案也会起作用。答案 0 :(得分:2)
webapp日志记录有许多可能的情况,这使得配置比理想情况更复杂。将log4j2 jar和配置文件放在webapp的类路径中应该可以正常工作。您是否在Web应用程序中看到了log4j2的手册页?如果问题仍然存在,请提交log4j2 jira票。