gpt4 book ai didi

java - 为什么 log4j 不记录到我用 log4j.xml 文件配置的文件?

转载 作者:行者123 更新时间:2023-11-28 22:21:58 25 4
gpt4 key购买 nike

我在各种环境中都遇到过这个问题,但从未找到一致的解释。我听说过有关 Tomcat 容器“困惑”的评论,其中可能有不同的日志记录实现,然后我的应用程序或类加载器不知道要使用哪个配置。

这是令人抓狂的场景之一,日志记录工作一次,然后在一小时后不记录,log4j.xml 文件没有更改。我的 log4j.xml 文件位于/src 目录的根目录中,因此它被部署到/WEB-INF/classes 目录的根目录中。我使用的是 Java 6、Tomcat 6,它是一个 GWT 2.3 应用程序,在 Windows 7 机器上从 Eclipse Helios 内部运行。

对于它的值(value),这是 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>

下面是我如何在我的类(class)中获取正在执行日志记录的记录器

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 版本,所以我假设您使用的是相对较新版本的 Log4j。

在您提供的第一段示例代码中:

    <root>
<priority value="debug"></priority>
<appender-ref ref="fileAppender"/>
</root>

您尚未修改根附加程序的日志记录级别。每 log4j 2.x documentation

    If no configuration files are present logback will default to the     DefaultConfiguration which will set up a minimal logging environment    consisting of a ConsoleAppender attached to the root logger. The output    will be formatted using a PatternLayout set to the pattern     "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n".    Note that by default, the root logger is assigned to Level.ERROR.

In order have the logger output to the file in the first example you need to change your root logger to:

    <root level="debug">
<appender-ref ref="fileAppender"/>
</root>

调试日志记录不工作的一个很好的指标是你不会在控制台上看到任何输出,因为默认日志记录级别设置为“错误”。我总是喜欢在我的记录器上有一个控制台附加程序,这样我就可以看到我的应用程序实际上正在记录。

    <appender-ref ref="Console"/>

在第二个例子中,根记录器不记录到文件的原因与第一个例子中的完全相同。但是,您设法正确设置了“com.mypackage.myLoggingClass”记录器,这就是为什么当您使用基于“com.mypackage.myLoggingClass”类的记录器时,您的应用程序具有调试输出的原因。

关于java - 为什么 log4j 不记录到我用 log4j.xml 文件配置的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13869674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com