SQL 拼接语句输出_项目使用了 ORM,具体执行的是什么 SQL 语句总是很迷?xorm1.0 解决了...

点击上方蓝色“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.0
  • golang 日志库选择其一

    目前比较使用多的日志库 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语言中文网”:

bd783a3e78ebfbaddcf1ee5654ef86cb.png

Go语言中文网启用微信学习交流群,欢迎加微信:274768166,投稿亦欢迎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值