Sql查询日志输出

go-doudou通过GddDB结构体和GddTx结构体封装底层*sqlx.DB实现输出sql日志的功能。这个特性与上文介绍的ddl工具生成的dao层代码没有直接关系,完全可以脱离生成的dao层代码,在你自己编写的CRUD代码中单独使用,但是必须要用wrapper.NewGddDB工厂方法创建的wrapper.DB接口实现类,或者是由该实现类调用BeginTxx方法开启的事务wrapper.Tx接口实现类来执行sql语句。

toolkit/sqlext/logger包里提供了ISqlLogger接口,用户可以自定义实现这个接口,也可以用go-doudou默认提供的实现类SqlLogger结构体。toolkit/sqlext/logger包还提供了一个工厂方法NewSqlLogger来创建SqlLogger实例。只需将该实例传入toolkit/sqlext/wrapper包的工厂方法NewGddDB创建出GddDB实例,再将该实例传入ddl工具生成的dao层的工厂方法里生成dao实例即可。每次执行CRUD操作都会打印出已经替换好参数的sql语句。

gdddb := wrapper.NewGddDB(db, wrapper.WithLogger(logger.NewSqlLogger(log.Default())))
u := dao.NewUserDao(gdddb)
// 使用变量u做CRUD操作,例如
// got, err := u.UpsertNoneZero(context.Background(), user)
1
2
3
4

该模块除了可以打印sql语句之外,还可以从context.Context中取出request id和opentracing(jaeger)的trace id,一并打印出来。

go-doudou输出sql查询日志

如果你采用go-doudou的默认实现SqlLogger,须将环境变量GDD_SQL_LOG_ENABLE设置为true