Плагин обработки событий 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
, вы можете проверить пример здесь
В качестве обходного пути ваш плагин может вызывать расширенные процедуры APOC apoc.log (например, apoc.log.info) для входа в систему.neo4j.log
на сервере.
Кроме того, вместо написания собственного плагина, запускаемого при фиксации, вы можете вместо этого использовать триггерные процедуры APOC .