上节内容我们详细讲解了Go项目中GORM的下载安装、初始化、读写分离和多数据源方面的内容。仅就功能来说做完这些工作后项目对Gorm的集成已经完成了,实际上有些项目确实也是这样做的。上篇文章在末尾我们提了句如果仅集成到这个程度,功能开发完全没有问题,但如果你还要长期维护项目的话,那么问题可大了去了。
原因是,GORM产生的SQL记录、慢查询、以及数据库错误都是通过GORM自身的GormLogger写到日志的,而且GormLogger默认是写到标准输出的。。。而不是项目本身的日志文件里,这样一来如果真的是SQL错误、慢查询等导致的Bug,你只能知道发生Error了,但是在项目日志里却找不到Error的明细,那你解决BUG就只能靠猜和试啦。
所以这节内容我们介绍怎么把GORM日志和项目日志整合到一起,让你拥有下面这样的SQL详细信息
{
"level": "debug",
"ts": "2024-10-09T17:09:07.603+0800",
"msg": "SQL DEBUG",
"sql": "INSERT INTO `orders` (`user_id`,`bill_money`,`order_no`,`state`,`is_del`,`created_at`,`updated_at`) VALUES (123453453,20,'20240627596615375920904456',1,0,'2024-10-09 17:09:07.586','2024-10-09 17:09:07.586')",
"rows": 1,
"dur(ms)": 53,
"traceid": "19d822280c64c5ed",
"spanid": "450ccc402492ed45",
"pspanid": "",
"file": "gormlog.go",
"line": 49
}
支持慢查询、SQL错误的详细记录,在开发环境还会增加SQL DEBUG输出把执行的SQL语句输出到日志文件和控制台,方便在开发阶段进行调试和验证。
我们同样会为GORM日志注入追踪ID,把它们归因到关联的请求上下文中去。这样一旦发生数据库相关的错误,我们可以通过监控主动发现、使用错误日志中的追踪ID还能把整个请求相关的日志都检索出来,查问题也会轻松很多。