我现在花了几个小时试图解决这个问题并完全失败.我发现新的配置过程不必要地复杂.
我有一个带有web.xml文件的Servlet,其中包含以下内容:
log4jConfiguration file:///etc/myApp/log4j2.xml
它似乎没有任何影响.我使用的是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的内容:
两种情况下的输出都是这样的:
Dec 03, 2013 6:06:45 PM test.Test main INFO: This is a logging message.
提前致谢,
约翰
编辑:这实际上是有效的.看来我失踪了,"log4j-jcl-2.0-beta9.jar".如果上面的"上下文参数"不起作用,Remko Popma的答案也会起作用.