Cassandra有org.apache.cassandra.cql3.QueryHandler接口,它提供apis来处理来自客户端的外部查询。
在处理准备好的陈述的api下面:
public ResultMessage processPrepared(CQLStatement statement, QueryState state, QueryOptions options) throws RequestExecutionException, RequestValidationException;
如果给出了CQLStatement,QueryState和QueryOptions,我想记录queryString和传递给它的值。我怎么能得到它?
我相信一个参与过cassandra代码的人可以帮助我解决这个问题。
答案 0 :(得分:1)
这在2.1中非常困难。对于更新版本的日志记录,他们需要这些,他们只需尽可能地重新创建它。您可以在ReadCommand实现中看到如何使用name()
或toCQLString()
等慢速查询日志记录。你可以向后移植这个和appendCQLWhereClause
的2个实现,以便能够做类似的事情,然后为修改语句构建一个。
在getPrepared()
中,您可以从ParsedStatement.Prepared获取rawCQLStatement
并将其存储在本地线程中。
您可能还想考虑使用自定义跟踪实现(example)或使用触发器并构建变异记录器。
答案 1 :(得分:1)
执行以下操作:
QueryHandler
接口的类,让Cassandra意识到它prepare
方法时添加到此列表中)以及当getPrepared
它&#39时您将从列表中获取的当前查询被称为;您可以使用MD5Digest id
processPrepared
时,您可以使用?
中的值替换查询字符串中的QueryOptions options.getValues()
。HTH