簡體   English   中英

Tomcat上下文重新加載后,Log4j停止寫入控制台

[英]Log4j stops to write to console after tomcat context reload

我在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目錄中。

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

感謝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日志中,但是在開發期間,我正在使用控制台,因此必須將其關閉。

當我在配置中添加<param name =“ Follow” value =“ true” />時,在任何情況下都沒有輸出,因此,由於有了此選項,我才得以發現真正的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM