Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java tomcat上下文重新加载后,Log4j停止写入控制台_Java_Eclipse_Tomcat_Logging_Log4j - Fatal编程技术网

Java tomcat上下文重新加载后,Log4j停止写入控制台

Java tomcat上下文重新加载后,Log4j停止写入控制台,java,eclipse,tomcat,logging,log4j,Java,Eclipse,Tomcat,Logging,Log4j,我对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"

我对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目录中。

使用的
follow
选项。此选项确定追加者是否接受在配置后重新分配的
System.out
System.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>

多亏了Paul的回答,我发现了日志记录器在重新加载上下文后没有登录的真正原因。问题在于,在应用程序初始化时,我调用了以下代码:

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日志,但在开发过程中,我使用的是控制台,所以必须关闭它


当我添加到我的配置中时,在任何情况下都没有输出,因此由于此选项,我设法发现了真正的问题。

请您解释一下。我已经添加了一些详细信息。我希望这就足够了。您是否将xml文件保存在类路径中。真正的问题有点不同(见下文),但由于这个答案,我能够发现它。因此,我认为这个答案是可以接受的。谢谢你,保罗!