java - 为什么静态值与 appender(log4j 自定义 appender)不同?
问题描述
我在春天做这样的静态变量。
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()
什么也不返回(size 0)。(A.getMap() 在服务层正确返回。)为什么静态值不同?..
解决方案
listMap
调用时加载,addSession
所以它是空的 当append()
方法被调用时
推荐阅读
- python - 按最终项目分组列表,但保持顺序
- python - 如何通过多对多链接获取记录
- pandas - 将一个大熊猫df分成n等份并将它们存储在一个列表中?
- javascript - GAS & V8:如何在 Check True 的选项卡之间移动行
- python - 如何为类提供可选参数?
- r - 删除 r 中的行会在其他行中创建 NA
- python - Python 打印和写入输出以“...”结尾 而不是完整的线
- java - 当 FXMLLoader 与 Controller 位于不同的类时,JavaFX @FXML 注释不起作用?
- python - 在嵌套循环中更新字典
- c# - 如何存储来自 Azure 函数的临时数据?