日志输出往往是打印一些调试或者SQL
语句,日志对象可以通过SetLogger/GetLogger
方法来设置,也可以通过配置文件来做配置。以下是一个开启了日志输出的配置示例:
database:
logger:
- path: "/var/log/gf-app/sql"
level: "all"
stdout: true
default:
- link: "mysql:root:12345678@tcp(127.0.0.1:3306)/user"
debug: true
需要注意这里使用关键字logger
作为ORM
的日志配置项名称,因此您无法使用该名字作为数据库配置分组。
ORM
组件输出的日志相当详尽,我们来看一个示例:
2021-05-22 21:12:10.776 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [ 4 ms] [default] [rows:0 ] [txid:1] BEGIN
2021-05-22 21:12:10.776 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [ 0 ms] [default] [rows:0 ] [txid:1] SAVEPOINT `transaction0`
2021-05-22 21:12:10.789 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [ 13 ms] [default] [rows:8 ] [txid:1] SHOW FULL COLUMNS FROM `user`
2021-05-22 21:12:10.790 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [ 1 ms] [default] [rows:1 ] [txid:1] INSERT INTO `user`(`id`,`name`) VALUES(1,"john")
2021-05-22 21:12:10.791 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [ 1 ms] [default] [rows:0 ] [txid:1] ROLLBACK TO SAVEPOINT `transaction0`
2021-05-22 21:12:10.791 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [ 0 ms] [default] [rows:1 ] [txid:1] INSERT INTO `user`(`id`,`name`) VALUES(2,"smith")
2021-05-22 21:12:10.792 [DEBU] {38d45cbf2743db16f1062074f7473e5c} [ 1 ms] [default] [rows:0 ] [txid:1] COMMIT
可以看到,日志包含以下几部分信息:
SQL
日志主要用于功能调试/问题排查,生产环境往往需要关闭掉,因此日志级别固定为DEBUG
级别。
SQL
执行耗时。从客户端发起请求到接收到数据的时间,单位为毫秒。当执行时间不足1毫秒时,展示为0毫秒。
SQL
所处的数据库配置分组,默认为default
。SQL
所属的事务ID。如果当前SQL不属于事务操作时,不存在该字段。SQL
语句。需要注意的是,由于底层使用的是SQL
预处理,这里的SQL
语句是通过组件自动拼接的结果,仅供参考。我们可以通过gf命令行工具的pack命令实现对任意文件/目录的打包。由于通过命令行工具进行打包比较简便,因此也是推荐的...
基本使用package mainimport ("github.com/gogf/gf/v2/container/gset""fmt")func main() {// 创建一个并发安全的集合对象s := g...
gtype并发安全基本类型的使用非常简单,往往就类似以下几个方法(以gtype.Int类型举例):func NewInt(value ...int) *Int...
基本介绍支持并发安全开关的环结构,循环双向链表。使用场景:ring这种数据结构在底层开发中用得比较多一些,如:并发锁控制...