当前位置: 首页 > 知识库问答 >
问题:

为什么静态值与appender(log4j自定义appender)不同?

丌官翰采
2023-03-14

我在Spring做这样的静态变量。

public class A {
  private static final Map<String, Session> listMap = new HashMap<>();
  public static Map<String> getMap() { return this.listMap.values() }
  public static void addMap(String name, Session s) { return this.listMap.put(name, s) }
}

我保存在服务层。

@Slf4j
public class BService {
  public void addSession(String name, Session s) { 
    A.addMap("a", s);
    log.info("added!");
  }
}

保存后,我在自定义appender中使用了它。(https://www.baeldung.com/log4j2-custom-appender)

@Plugin(
  name = "MapAppender", 
  category = Core.CATEGORY_NAME, 
  elementType = Appender.ELEMENT_TYPE)
public class MapAppender extends AbstractAppender {

    private ConcurrentMap<String, LogEvent> eventMap = new ConcurrentHashMap<>();

    protected MapAppender(String name, Filter filter) {
        super(name, filter, null);
    }

    @PluginFactory
    public static MapAppender createAppender(
      @PluginAttribute("name") String name, 
      @PluginElement("Filter") Filter filter) {
        return new MapAppender(name, filter);
    }

    @Override
    public void append(LogEvent event) {
        Map<> resultMap = A.getMap();
        send()
    }
}

但是,当执行appender的append()方法时,A.getMap()不返回任何内容(大小为0)。(A.getMap()在服务层中正确返回。)为什么静态值不同?。。

共有1个答案

单于智
2023-03-14

调用addSession时加载listMap,因此调用append()方法时,它为空

 类似资料:
  • 我对使用Spring、SLF4J和logback是新手。我试图实现一个自定义数据库追加器,它将只记录Spring批处理期间数据库的特定类型的异常。 到目前为止,我已经开始在spring中设置一个扩展AppenderBase类的Logback Database Appender,然后设置一个扩展InitializingBean的初始化器,以便在spring初始化后将Appender添加到根记录器(这

  • 我正在我的web项目中使用log4j2。我试图通过扩展AbstractAppender将日志直接放入Kafka。根据文档,我的理解是我可以为一个自定义的附加器指定patternlayout,并且设置好了,我的记录器将用格式化的字符串向kafka发送日志事件,但这并没有发生。log4j2.xml看起来像

  • 主要内容:Log4j Appender Properties配置Log4j 提供 Appender 对象,主要负责将日志消息打印到不同的目的地,例如控制台、文件、NT 事件日志、Swing 组件、JMS、远程 UNIX 系统日志守护进程、Socket套接字等。 每个 Appender 对象都有与其相关的不同属性,这些属性指定了该对象的行为。 属性 描述 layout Appender 使用 Layout 对象和与它们关联的转换模式来格式化日志信息。 targe

  • 下面是我使用的一些代码: 如何只打印信息日志?

  • 我创建了一个自定义的Log4J2Kafka附加器,因为我需要以协议缓冲区格式发送消息。当我运行应用程序时,我看到以下警告。如何使自定义追加器覆盖默认追加器? 插件[kafka]已经映射到类org.apache.logging.log4j.core.appender.mom.kafka.kafkaappender,忽略了类com.abc.appender.kafkaappender 注意:我阅读了h

  • 我正在尝试为log4j2.0创建一个自定义appender,但是在获取log4j配置以识别appender时遇到问题。我知道log4j 2.0不支持配置属性中的包。因此,正如这里所建议的,我尝试使用纯javac运行代码,但即使如此,它也会出现以下错误: 这是我的自定义附件: 和我的配置xml: 提前感谢您提供的有用信息