开启sqlboiler DebugMode后控制台未输出SQL查询语句的原因排查
DebugMode设置时机不对:要是你先初始化了数据库连接,再设置
boil.DebugMode = true,那大概率没用。sqlboiler的连接实例会在创建时读取全局DebugMode的值,后续改全局变量不会影响已经建好的连接。得确保在boil.InitDB这类初始化操作之前就把DebugMode设好。没用到sqlboiler生成的查询方法:如果你直接用原生SQL(比如
db.Exec、db.Query)而不是sqlboiler生成的模型方法(像Model.Find、Query构建器),DebugMode管不到这些原生查询,自然不会打日志。日志输出被拦截或重定向了:sqlboiler默认把调试日志输出到stderr,要是你的命令行把stderr重定向了(比如
./app 2>/dev/null),或者有自定义日志框架把输出截走了,就看不到内容。检查下有没有改默认的日志输出设置。查询根本没执行:可能你只是构建了查询对象,但没调用执行方法(比如
Exec、All、One)。比如只写了q := models.Users(qm.Where("id=?", 1))但没跑q.All(ctx, db),这种情况不会触发SQL执行,当然没日志。局部设置覆盖了全局DebugMode:如果写查询的时候用了
qm.Debug(false)这种查询修改器,会直接覆盖全局的boil.DebugMode,强制关掉这个查询的调试日志。检查下查询语句里有没有这类局部配置。sqlboiler版本有bug:部分旧版本的sqlboiler在DebugMode上可能有问题,尤其是和某些数据库驱动(比如PostgreSQL、MySQL)的特定版本搭配时。试试升级到最新稳定版再测试。
内容的提问来源于stack exchange,提问作者Jack

