我在应用程序中使用gocql驱动程序。驱动程序是否可以在控制台上记录查询? 如何配置记录器以打印完整的查询(以及数据绑定)
package main
import (
"fmt"
"github.com/gocql/gocql"
)
var Session *gocql.Session
type Emp struct {
id string
firstName string
lastName string
age int
}
func init() {
var err error
cluster := gocql.NewCluster("localhost")
cluster.Keyspace = "cms"
Session, err = cluster.CreateSession()
if err != nil {
panic(err)
}
fmt.Println("cassandra init done")
}
func main() {
e := Emp{
id: "1",
firstName: "John",
lastName: "DOe",
age: 88,
}
createEmp(e)
}
func createEmp(emp Emp) {
fmt.Println(" **** Creating new emp ****\n", emp)
if err := Session.Query("INSERT INTO emps(empid, first_name, last_name, age) VALUES(?, ?, ?, ?)",
emp.id, emp.firstName, emp.lastName, emp.age).Exec(); err != nil {
fmt.Println("Error while inserting Emp")
fmt.Println(err)
}
}
答案 0 :(得分:0)
这就是我们在Java中的处理方式。我们定义了一个自定义的LatencyTracker:
private LatencyTracker getLatencyTracker() {
return new LatencyTracker() {
@Override
public void update(Host host, Statement statement, Exception e, long l) {
LOGGER.info(statement.toString());
}
@Override
public void onRegister(Cluster cluster1) {
}
@Override
public void onUnregister(Cluster cluster1) {
}
};
}
然后将其注册到集群中
cluster.register(getLatencyTracker());
答案 1 :(得分:0)
go驱动程序具有一个QueryObserver,您可以实现它来查询时间: https://github.com/gocql/gocql/blob/master/session.go#L1891-L1926
由您检查执行时间是否超过阈值,然后根据需要进行打印,但是看起来它使您可以访问调试所需的语句对象,主机和计时。
以下是一些示例代码,显示了在定时推测性执行影响的情况下正在运行的QueryObserver: https://github.com/instaclustr/sample-GoCql-Speculative-Execution/blob/master/spectest.go
以上示例来自以下有关投机执行的博客文章: https://www.instaclustr.com/speculative-query-executions-gocql/
(如果遇到尾部延迟问题,则可能应该考虑使用客户端的推测性执行,但这是一个不同的主题:)
此外,树中还有一个使用QueryObserver进行验证的测试用例: https://github.com/gocql/gocql/blob/16cf9ea1b3e28090d416d36528f304e4553e6b56/cassandra_test.go#L140
可能是一个开始玩耍的好地方。