Почему значение stati c отличается от appender (настраиваемый app4j log4j)? - PullRequest
1 голос
/ 09 апреля 2020

Весной я делаю переменную stati c следующим образом.

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!");
  }
}

После сохранения я использовал его в пользовательском приложении. (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()
    }
}

Однако при выполнении метода append () аппендера A.getMap() ничего не возвращает (размер 0). (A.getMap () возвращает корректно на уровне сервиса.) Почему значение stati c отличается? ..

1 Ответ

1 голос
/ 09 апреля 2020

listMap загружается при вызове addSession, поэтому он пуст при вызове append() метода

...