拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Log4j 警告:“无法为Logger 找到Appender”

Log4j 警告:“无法为Logger 找到Appender”

白鹭 - 2021-11-06 2354 0 2

1. 概述

在本教程中,我们将展示如何修复警告,我们将解释appender 是什么以及如何定义它。此外,我们将展示如何以不同的方式解决警告。

2. Appender 定义

我们先来解释一下什么是appender。Log4j 允许我们将日志放入多个目的地。它打印输出的每个目的地称为appender 我们有用于控制台、文件、JMS、GUI 组件等的附加程序。

log4j 中没有定义默认的appender。此外,记录器可以有多个appender,在这种情况下,记录器将输出打印到所有appender中。

3. 警告信息说明

现在我们知道了appender 是什么,让我们了解手头的问题。警告消息说找不到记录器的附加程序。

让我们创建一个NoAppenderExample

public class NoAppenderExample { private final static Logger logger = Logger.getLogger(NoAppenderExample.class);
 public static void main(String[] args) {
 logger.info("Info log message");
 }
 }

我们在没有任何log4j 配置的情况下运行我们的类。在此之后,我们可以在控制台输出中看到警告以及更多详细信息:

log4j:WARN No appenders could be found for logger (com.baeldung.log4j.NoAppenderExample).
 log4j:WARN Please initialize the log4j system properly.
 log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

4. 解决配置问题

默认情况下,Log4j 会查看应用程序资源的配置文件 现在让我们在资源目录下log4j.xml

<log4j:configuration debug="false">
 <!--Console appender -->
 <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
 <layout class="org.apache.log4j.PatternLayout">
 <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %p %m%n"/>
 </layout>
 </appender>
 <root>
 <level value="DEBUG"/>
 <appender-ref ref="stdout"/>
 </root>
 </log4j:configuration>

我们定义了 所有应用程序记录器都是它的子项并覆盖其配置。我们用一个appender 定义了rootroot

让我们 结果,日志包含我们的语句:NoAppenderExample

2021-05-23 12:59:10 INFO Info log message

4.1. Appender 可加性

不必为每个记录器定义一个appender。给定记录器的日志记录请求将日志发送到为其定义的附加程序以及为层次结构中更高的记录器指定的所有附加程序。让我们用一个例子来展示它。

如果记录 仅当中间祖先中的可加性标志设置为 如果additivity 标志设置为ABABtruefalse

为了证明loggerlog4j.xmlNoAppenderExample logger

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
 <log4j:configuration debug="false">
 ...
 <logger name="org.1ju.log4j.NoAppenderExample" />
 ...
 </log4j:configuration>

让我们 这一次,日志语句出现在控制台中。尽管NoAppenderExampleNoAppenderExampleroot

5. 配置文件不在类路径上

现在让我们考虑在应用程序类路径之外定义配置文件的情况。我们有两个选择:

  • java命令行选项指定文件路径-Dlog4j.configuration=<path to log4j configuration file>

  • 在代码中定义路径: PropertyConfigurator.configure(“<path to log4j properties file>”);

在下一节中,我们将看到如何在我们的Java 代码中实现这一点。

6. 解决代码问题

假设我们不需要配置文件。我们把log4.xmlmain

public class NoAppenderExample { private final static Logger logger = Logger.getLogger(NoAppenderExample.class);
 public static void main(String[] args) {
 BasicConfigurator.configure();
 logger.info("Info log message");
 }
 }

我们从 我们看一下BasicConfiguratorconfigureConsoleAppenderrootconfigure

public static void configure() {
 Logger root = Logger.getRootLogger();
 root.addAppender(new ConsoleAppender(new PatternLayout("%r [%t] %p %c %x - %m%n")));
 }

因为root

7. 结论

关于如何解决有关缺少appender 的log4j 警告的简短教程到此结束。我们解释了appender 是什么以及如何使用配置文件解决警告问题。然后,我们解释了appender 可加性是如何工作的。最后,我们展示了如何解决代码中的警告。


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *