我在各种环境中都遇到过这种情况,但从未找到一致的解释。我听说过关于 Tomcat 容器“混乱”的评论,其中可能有不同的日志记录实现,然后我的应用程序或类加载器不知道要使用哪种配置。
这是日志记录工作一次,然后在一个小时后没有记录,log4j.xml 文件没有更改时的那些令人抓狂的场景之一。我的 log4j.xml 文件位于 /src 目录的根目录中,因此它被部署到 /WEB-INF/classes 目录的根目录。我正在使用 Java 6、Tomcat 6,它是一个 GWT 2.3 应用程序,在 Windows 7 机器上的 Eclipse Helios 内部运行。
对于它的价值,这里是 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?