Плагин обработки событий Neo4j + ведение журнала

Я новичок в neo4j и хочу разработать плагин, который регистрирует изменения в базе данных в журнале, сейчас мне нужны только данные транзакций журнала. Я использую maven с Java 17 для создания jar и Docker для развертывания neo4j с последним образом (5.10.0).

Плагин выглядит следующим образом:

Класс для обработки событий регистрации:

      public class Neo4jTriggersPlugin implements TransactionEventListener<Object> {
    private final Log log;


    public Neo4jTriggersPlugin(DatabaseManagementService dbms, LogService lgsvc) {
        this.log = lgsvc.getUserLog(Neo4jTriggersPlugin.class);
    }

    @Override
    public Object beforeCommit(TransactionData transactionData, Transaction transaction, GraphDatabaseService graphDatabaseService) throws Exception {
        return null;
    }

    @Override
    public void afterCommit(TransactionData transactionData, Object o, GraphDatabaseService graphDatabaseService) {
        log.info("Transaction committed" + transactionData.toString());
    }

    @Override
    public void afterRollback(TransactionData transactionData, Object o, GraphDatabaseService graphDatabaseService) {
    }

      public class LifecycleManagement extends ExtensionFactory<LifecycleManagement.Dependencies> {
    private Log logger;
    @Override
    public Lifecycle newInstance(ExtensionContext extensionContext, final Dependencies dependencies) {
        return new LifecycleAdapter() {
            LogService logService = dependencies.log();
            private Neo4jTriggersPlugin triggersPlugin;

            @Override
            public void start() {
                System.out.println("STARTING trigger watcher");
                triggersPlugin = new Neo4jTriggersPlugin(dependencies.getGraphDatabaseService(), logService);
                dependencies.getGraphDatabaseService().registerTransactionEventListener("neo4j", triggersPlugin);
            }

            @Override
            public void shutdown() {
                System.out.println("STOPPING trigger watcher");
                dependencies.getGraphDatabaseService().unregisterTransactionEventListener("neo4j",triggersPlugin);
            }
        };
    }

    interface Dependencies {
        DatabaseManagementService getGraphDatabaseService();
        LogService log();
    }

    public LifecycleManagement(Log log) {
        super(ExtensionType.DATABASE, "registerTransactionEventHandler");
        this.logger = null;
    }

Я нашел пример здесь . Я просмотрел документацию neo4j о ведении журналов, процедурах, расширениях и т. д.

После компиляции и сборки .jar вышеуказанного плагина я копирую его вvar/lib/neo4j/plugins/каталог и перезапустите контейнер. Затем я запускаю несколько шифровальных запросов и не вижу никакой информации, записанной в журнале. Также я смонтировал /logs и /data/database как тома.

Я был бы признателен, если бы кто-нибудь мог объяснить, как это делается правильно, или указать мне на хороший источник информации. Спасибо.

2 ответа

Вам нужно получить регистратор изDependencies, вы можете проверить пример здесь

https://github.com/ikwatro/neo4j-transaction-event-listener-extension/blob/master/src/main/java/com/ikvattro/neo4j/tx/MyExtensionFactory.java#L31

В качестве обходного пути ваш плагин может вызывать расширенные процедуры APOC apoc.log (например, apoc.log.info) для входа в систему.neo4j.logна сервере.

Кроме того, вместо написания собственного плагина, запускаемого при фиксации, вы можете вместо этого использовать триггерные процедуры APOC .

Другие вопросы по тегам