我是新的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) {
}
个字符
我找到了示例here。我浏览了neo4j关于日志,过程,扩展等的文档。
编译并构建上述插件的.jar后,将其复制到var/lib/neo4j/plugins/
目录并重新启动容器。然后我运行一些密码查询,我没有看到任何信息写在日志中。我还将/logs和/data/database挂载为卷。
如果有人能解释这是如何正确地完成的,或者给我指出一个好的信息来源,我将不胜感激。- 谢谢-谢谢
2条答案
按热度按时间ev7lccsx1#
您需要从
Dependencies
获取日志记录器,您可以在此处查看示例https://github.com/ikwattro/neo4j-transaction-event-listener-extension/blob/master/src/main/java/com/ikwattro/neo4j/tx/MyExtensionFactory.java#L31
slhcrj9b2#
作为一种解决方法,您的插件可以调用扩展的APOC apoc.log过程(例如,apoc.log.info)来登录到服务器上的
neo4j.log
。另外,您可能希望使用APOC's trigger procedures代替编写自己的commit触发插件。