【问题标题】:Log4j stops to write to console after tomcat context reload在 tomcat 上下文重新加载后,Log4j 停止写入控制台
【发布时间】:2013-12-04 23:41:34
【问题描述】:

tomcat下log4j有问题。

当 Eclipse 将新版本的应用程序部署到 tomcat 时,它会重新加载应用程序上下文。重新加载上下文完成后,Web 应用程序级别的记录器停止写入控制台。

只有 tomcat 记录器仍然有效。

我在 web 应用程序的 log4j.xml 中的配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
    </layout>
</appender>
<root>
    <level value="INFO" />
    <appender-ref ref="stdout"/>
</root>
</log4j:configuration>

我已将 log4j-1.2.16.jar 放入我的应用程序的 /WEB-INF/lib 目录。除此之外,根据官方 tomcat 网站上的教程,我已经将 log4j-1.2.16.jar 的另一个副本放到 tomcat 的 /lib 目录中。

【问题讨论】:

  • 您是否将 xml 文件保存在类路径中。

标签: java eclipse tomcat logging log4j


【解决方案1】:

使用org.apache.log4j.ConsoleAppenderfollow 选项。此选项确定附加程序是否接受配置后对 System.outSystem.err 的重新分配。默认情况下,false

<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <param name="Follow" value="true" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" 
               value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
    </layout>
</appender>

【讨论】:

  • 真正的问题有点不同(见下文),但多亏了这个答案,我才能够发现它。因此,我将此答案标记为已接受。谢谢保罗!
【解决方案2】:

感谢 Paul 的回答,我发现了 logger 在重新加载上下文后没有记录的真正原因。问题是在应用程序初始化时我调用了以下代码:

System.setErr( new PrintStream( new LoggingOutputStream( Logger.getLogger("outLog"), Level.ERROR ), true));
System.setOut( new PrintStream( new LoggingOutputStream( Logger.getLogger("outLog"), Level.INFO ), true));

此代码应该将写入控制台(如 System.out.println)的所有输出写入生产服务器上的 xml 日志,但在开发期间我使用控制台,因此必须将其关闭。

当我将 添加到我的配置中时,无论如何都没有输出,所以多亏了这个选项,我设法发现了真正的问题。

【讨论】:

    猜你喜欢
    • 2013-09-09
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 2011-10-29
    • 2017-03-18
    • 1970-01-01
    相关资源
    最近更新 更多