【发布时间】:2014-06-03 10:30:44
【问题描述】:
我正在使用 Tomcat 8.0.3 和 log4j 2.0-rc1 来部署 GWT 应用程序(servlet 2.5)。
我相信我修复了通常的日志配置错误,但仍然没有任何内容记录到控制台或文件中。
我的 web.xml 的负责人:
<listener>
<listener-class>org.apache.logging.log4j.core.web.Log4jServletContextListener</listener-class>
</listener>
<filter>
<filter-name>log4jServletFilter</filter-name>
<filter-class>org.apache.logging.log4j.core.web.Log4jServletFilter</filter-class>
</filter>
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>file:///C:/Users/name/Desktop/log4j2.xml</param-value>
</context-param>
<filter-mapping>
<filter-name>log4jServletFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
这是 log4j2.xml 配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="TRACE">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%p] %c{1}: %m%n"/>
</Console>
<File name="infoFile" fileName="${sys:catalina.home}/logs/info.log" >
<PatternLayout pattern="[%p] %c{1}: %m%n"/>
</File>
</Appenders>
<Loggers>
<Root level="info">
<Appender-Ref ref="Console"/>
<Appender-Ref ref="infoFile"/>
</Root>
</Loggers>
</Configuration>
我将 log4j2 api 和 core 添加到我的 Maven 依赖项中,我可以看到它们在 WEB-INF\classes\ 中爆炸。我还将它们从 catalina.properties 中的 skipJar 列表中删除。
部署战争时,不会在 localhost 或 catalina 日志中引发错误或警告。这是本地主机日志:
INFO ContextListener: contextInitialized()
INFO SessionListener: contextInitialized()
INFO Log4jServletContextListener ensuring that Log4j starts up properly.
INFO Log4jServletFilter initialized.
奇怪的是 info.log 文件已创建,但从未写入。
我也在使用 Hibernate,它的日志确实显示在控制台中,这可能是问题吗?
最后,这就是我使用记录器的方式:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
private static final Logger LOG = LogManager.getLogger(MyClass.class.getName());
public void myMethod() {
LOG.info("Logging some message");
}
(log4j2 配置文件暂时在我的桌面,因为路径中好像不能使用空格)
【问题讨论】:
标签: java tomcat logging configuration log4j2