我在各種環境中遇到過這種情況,從來沒有找到一致的解釋。我聽說有關Tomcat容器是'混亂'的評論,可能有不同的日誌實現,然後我的應用程序或類加載器不知道要使用哪種配置。爲什麼log4j不能使用log4j.xml文件登錄到我配置的文件?
這是當日志記錄工作一次,然後在一小時後沒有記錄日誌而沒有對log4j.xml文件進行更改的那些瘋狂場景之一。我在我的/ src目錄的根目錄下有log4j.xml文件,所以它被部署到/ WEB-INF/classes目錄的根目錄。我使用的是Java 6,Tomcat 6,它是一個GWT 2.3應用程序,從Windows Helios中的Windows 7機器上運行。
對於它的價值,這裏的的log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE}
%5p %c{1}:%L - %m%n"/>
</layout>
</appender>
<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${catalina.home}/logs/log4j.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d
%-5p [%c{1}] %m %n" />
</layout>
</appender>
<root>
<priority value="debug"></priority>
<appender-ref ref="fileAppender"/>
</root>
</log4j:configuration>
這裏就是我如何得到我的課的記錄是在做記錄
protected static Logger m_logger = Logger.getLogger(RemoteLoggingServiceImpl.class);
,然後實際登錄我只是做
m_logger.debug("my log message");
使用上面的代碼,它不寫入logj4.log文件。
然後我嘗試了以下方法,它將它記錄到log4j.log文件中,但沒有按照我的預期記錄到otherFile.log文件。下面是更新後的log4j.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE}
%5p %c{1}:%L - %m%n"/>
</layout>
</appender>
<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${catalina.home}/logs/log4j.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d
%-5p [%c{1}] %m %n" />
</layout>
</appender>
<appender name="otherFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${catalina.home}/logs/otherFile.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d
%-5p [%c{1}] %m %n" />
</layout>
</appender>
<root>
<priority value="debug"></priority>
<appender-ref ref="fileAppender"/>
</root>
<logger name="com.mypackage.myLoggingClass">
<level value="debug"/>
<appender-ref ref="otherfileAppender"/>
</logger>
</log4j:configuration>
,我創造這個記錄與此相反:
protected static Logger m_logger = Logger.getLogger("com.mypackage.myLoggingClass");
任何人都可以解釋爲什麼它不會在第一個場景中的所有記錄,和/或爲什麼它在第二種情況下記錄到log4j.log而不是otherFile.log?
我使用log4j的版本1.2.9 – user26270