Hazelcast,在缓存中发生某些变化时进行记录

Hazelcast, logging when something changes in the cache

我的 JVM 中嵌入了 运行 Hazelcast。我想要一些简单的日志,每次缓存中发生变化时都会记录下来。像 Cache changed: key = value.

这样简单的东西

我可以自己写这些日志,但如果这还不存在,我会感到惊讶... 但是我似乎找不到选项。

Hazelcast 中是否已经存在这种日志记录?

没有像这样的简单配置 change 事件记录或处理另一项任务。 Hazelcast 有 EntryListener 接口,你可以根据需要的事件来实现。 Here is the documentation.

您可以尝试使用以下示例代码片段。

根据需要创建自定义 entryListener。

// Your custom entity listener.
@Slf4j
public class MyMapEventLogger implements EntryAddedListener<String, String>,
        EntryRemovedListener<String, String>, EntryUpdatedListener<String, String>,
        EntryEvictedListener<String, String>, MapEvictedListener, MapClearedListener {

    @Override
    public void entryAdded(EntryEvent<String, String> event) {
        log.info("entryAdded: {}" , event);
    }

    @Override
    public void entryRemoved(EntryEvent<String, String> event) {
        log.info("entryRemoved: {}", event);
    }

    @Override
    public void entryUpdated(EntryEvent<String, String> event) {
        log.info("entryUpdated: {}", event);
    }

    @Override
    public void entryEvicted(EntryEvent<String, String> event) {
        log.info("entryEvicted: {}", event);
    }

    @Override
    public void mapEvicted(MapEvent event) {
        log.info("mapEvicted: {}", event);
    }

    @Override
    public void mapCleared(MapEvent event) {
        log.info("mapCleared: {}", event);
    }
}

在使用 addEntryListener 方法创建后,将您的自定义 entryListener 绑定到您的地图。

public class ListenerSample {
    public static void main(String[] args) {
        HazelcastInstance hz = Hazelcast.newHazelcastInstance();

        IMap<String, String> map = hz.getMap("myMap");

        MyMapEventLogger myMapEventLogger= new MyMapEventLogger();
        map.addEntryListener(myMapEventLogger, true);

        // Put, modify and then clear
        map.put("1", "1");
        map.put("1", "2");
        map.clear();
    }
}