【问题标题】:Why is the static value different from appender(log4j custom appender)?为什么静态值与 appender(log4j 自定义 appender)不同?
【发布时间】:2020-07-21 22:31:26
【问题描述】:

我在春天做这样的静态变量。

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() 在服务层正确返回。) 为什么静态值不同?..

【问题讨论】:

    标签: java spring-boot static log4j appender


    【解决方案1】:

    listMap 在你调用 addSession 时被加载,所以它是空的 当append() 方法被调用时

    【讨论】:

    • 但是,我在执行append之前执行了addSession
    • 你在哪里初始化listMap。还放了执行顺序。从问题来看,似乎之前调用了 append。
    • 对不起,我编辑了内容!。我是这样想的。 bService.addSession() exe。 >> A.listMap init >> A.listMap.put() >> create log >> MapAppender.append() exe >> a.getMap() 所以,我猜listMap在执行MapAppender.append()之前有一个条目但是listMap没有进入.....
    • getMap() 无法返回地图。它必须是Session,因为地图值是会话
    • 我解决了问题!!当我使用devtools 时,它通过单独的类加载器加载类。这就是为什么不共享静态变量的原因!!
    猜你喜欢
    • 2014-05-20
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多