java - log4j - 为什么我的 appender 不显示消息?

标签 java logging log4j consoleappender

在我的工作中,我继承了一个独立应用程序的维护。
以下代码配置了 Log4J,但在控制台上看不到任何消息。

    LogManager.resetConfiguration();

    PatternLayout layout = new PatternLayout();
    layout.setConversionPattern("RECORD-BACKEND / (%-5p) %m (%F:%L)%n");

    ConsoleAppender stderr = new ConsoleAppender(); 
    stderr.setTarget(ConsoleAppender.SYSTEM_ERR);
    stderr.setLayout(layout);
    stderr.addFilter(new CurrentThreadLogFilter());
    stderr.setThreshold(Level.INFO);
    stderr.activateOptions();

    Logger loggerRECORD = getLoggerRECORD();
    loggerRECORD.setAdditivity(false);
    loggerRECORD.addAppender(stderr);

    Logger root = Logger.getRootLogger();
    root.setLevel(Level.WARN);
    root.addAppender(stderr);

    // some lines forward ...

    loggerRECORD.info("Process starting...");

我错过了什么?

最佳答案

很遗憾,您还没有发送实际打印消息的代码。但是我可以假设您尝试做这样的事情:

logger.info("我的消息");

在这种情况下,您的消息将不会被打印,因为它被定义为打印警告的 root 记录器过滤掉了。

Log4J 中的记录器存储为层次结构。 root 记录器是这棵树的入口点。每个记录器根据配置的级别过滤日志消息。因此,如果上层记录器(在您的情况下为根)过滤日志消息,它甚至不会到达下层记录器,并且绝对不会到达附加程序。

您的解决方案是定义根记录器以允许所有消息。

最后一点:您是否有任何特殊原因以编程方式配置记录器?可以使用属性或(更好的)xml 文件配置 Log4J。看看这个document .

还有一个注意事项。 Log4J 已被其创建者弃用。如果您现在开始,请转到 Logback作为记录器和 SLF4J作为一个轻量级的日志接口(interface)。

关于java - log4j - 为什么我的 appender 不显示消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16733292/

相关文章:

java - Thymeleaf 迭代嵌套列表来为高尔夫应用程序创建表 <th> 标题和 <td> 文本

java - 如何使用java中的for循环以三角形打印出“鸡”一词?

一个应用程序中的 java.util.logging.Logger 和 org.apache.log4j.Logger - 第一个会记录为 log4j 吗?

c# - 无法将事件源重新注册到新的自定义事件日志

java - JBoss 5.0.1 : log4j. 属性文件在 EAR 中未生效

java - 导入org.apache.log4j无法解析

java - JComboBox ActionEvent 与多个组合框一起执行?

java - Android Studio无法识别 "setAdapter()"方法

java - (Java) 将事件写入日志文本文件

java - 减少 SOAPUI API 日志记录