点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言
昨天有人问,能不能讲讲 xorm,于是今天先来一篇简单的。
自定义上下文 SQL Log 需求有哪些
- 可以使用自己的封装日志库,拓展日志输出问题,可以输出到 es(elasticsearch)等,方便日志分析。
- 方便定位 sql 问题。
- 集成 sql 指标监控,可以找出慢 sql,优化 sql 语句。
- 集成链路追踪(opentracing),更清楚知道业务都执行了哪些 sql 语句。
前提是 xorm 对应版本要求 >=1.0 以上的
先看下 xorm ContextLogger interface 是什么样的?https://pkg.go.dev/xorm.io/xorm/log?tab=doc#ContextLogger
type SQLLogger
接下来就实现以上这些接口即可。以 logrus log 库为例, 简单实现一下。
golang 版本使用 go 1.13+ 以上版本, 并开启 go mod。
export GONOPROXY="xorm.io"
export GOPROXY="https://goproxy.cn,direct"
go get xorm.i/xorm@v1.0.0golang 日志库选择其一
目前比较使用多的日志库 logrus, zap 等开源日志库。性能都比较好,结合自己的需求,选择合适的日志库。logrus[1]doc[2]zap[3]doc[4]
安装 logrus 库依赖
go get github.com/sirupsen/logrus
关键代码实现, 需要注意的是 ContextLogger 这个接口必须都要重新实现一遍。
type LogCtx
调用示例 main.go
// mysql 实例
完整代码实现链接:xormlog[5]
总结
当然这个 sql 日志实现输出是同步的。如果有影响到返回业务数据的性能,可以改成异步输出 sql 日志。
参考资料
[1]logrus: https://github.com/sirupsen/logrus
[2]doc: https://pkg.go.dev/github.com/sirupsen/logrus?tab=doc
[3]zap: https://github.com/uber-go/zap
[4]doc: https://pkg.go.dev/go.uber.org/zap?tab=doc
[5]xormlog: https://github.com/leeyongda/xormlog
推荐阅读
到底要不要用 ORM?ORM vs. 非 ORM 对比
喜欢本文的朋友,欢迎关注“Go语言中文网”:
Go语言中文网启用微信学习交流群,欢迎加微信:274768166,投稿亦欢迎