Log4j2创建日志文件,但不写入日志文件

我正在使用Tomcat 8.0.3和log4j 2.0-rc1部署GWT应用程序(Servlet 2.5)。

我相信我已修复了通常的日志配置错误,但仍然没有任何内容记录到控制台或文件中。

我的 头:

<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>

这是 配置:

<?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\。我还将它们从skipJarcatalina.properties 的列表中删除。

部署战争后,在localhost或catalina日志中不会引发任何错误或警告。这是本地主机日志:

INFO  ContextListener: contextInitialized()

INFO SessionListener: contextInitialized()

INFO Log4jServletContextListener ensuring that Log4j starts up properly.

INFO Log4jServletFilter initialized.

奇怪的是, 文件已创建,但从未写入。

我也在使用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配置文件暂时位于我的桌面上)

回答:

据我所知,您的配置是正确的,并且所有设置均已按照针对Web应用的log4j2

手册页中的说明进行了设置。

您可以尝试做的一件事是将log4j2.xml配置文件放在类路径中(在WEB-INF /

classes下),然后删除log4jConfigurationcontext-

param设置。但是由于您看到正在创建一个info.log文件,因此很可能已经正确发现了log4j2.xml文件,因此将其放在类路径中可能无济于事。(虽然值得一试。)

我可以想到另外两个原因,为什么日志文件中什么也不显示:缓冲了日志输出,并且没有在每个事件上刷新该缓冲区。但是,FileAppender的默认值为InstantFlush

= true,因此这意味着rc1中引入了一个新的错误。这是可能的,但不太可能(当前中继源看起来正确)。

最后,是否有可能myMethod不会调用记录日志的方法(在上面的示例中)?有没有办法验证此方法是否被调用?

以上是 Log4j2创建日志文件,但不写入日志文件 的全部内容, 来源链接: utcz.com/qa/432898.html

回到顶部