mysql - 如何在 Go-Gorm 中禁用默认错误记录器
问题描述
我正在将 GORM 与 MySQL 一起使用,我遇到并处理了错误Error 1062: Duplicate entry
。问题是它仍然打印到控制台。
中的代码gym/models/auth.go:49
:
func AddAuth(username, password string) error {
passwordHash, err := auth.HashPassword(password, argon2Conf)
if err != nil {
return err
}
userAuth := Auth{
Username: username,
Password: passwordHash,
}
return db.Create(&userAuth).Error
}
我正在处理处理函数中的错误:
func SignUpHandler(c *gin.Context) {
var form user
if err := c.ShouldBind(&form); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
if err := models.AddAuth(form.Username, form.Password); err == nil {
c.JSON(http.StatusOK, gin.H{"status": "you are signed in"})
} else {
// I think I have handled the sql error here
c.JSON(http.StatusBadRequest, gin.H{"error": "sign in failed"})
}
}
当我发送POST
请求时,错误得到了正确处理,并且我得到了正确的响应{"error": "sign in failed"}
。但控制台仍然会打印此错误消息:
(/...../gym/models/auth.go:49)
[2019-04-28 23:37:06] Error 1062: Duplicate entry '123123' for key 'username'
[GIN] 2019/04/28 - 23:37:06 | 400 | 136.690908ms | ::1 | POST /signup
我很困惑,因为我处理了错误,但它仍然被打印出来。如何防止此错误被打印到错误日志中?还是我正确处理错误?
解决方案
更新:对于 gorm v2
:
使用Logger
in gorm.Config
:
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent),
})
对于 gorm v1
:
使用db.LogMode使默认错误记录器静音。
LogMode 设置日志模式,
true
为详细日志,false
为无日志,默认只打印错误日志。
db.LogMode(false)
应该做的工作!
推荐阅读
- javascript - 表单未提交,因为字段类型
- javascript - JavaScript for 循环仅在第一次单击事件时找到子 div 类
- gradle - OpenAPI Generator 从命令行工作,但不能从 Gradle 插件工作
- amazon-web-services - 如何使用 s3cmd 列出所有空文件夹
- javascript - JavaScript DOM 样式在 Angular 中导入动画模块后停止工作
- javascript - 我试图让“技术”这个词只在页面滚动后出现滚动功能词,但它也在顶部 onload 我不想要这个
- python - 计算两个 3D 对象之间最小距离的简单方法
- mysql - 删除 MySQL WHERE id IN (@VARIABLE) 中的记录 -- (2,3,4)
- rasa-nlu - 如何修复错误用户警告:“evaluate_every_number_of_epochs”的值大于“epochs”的值。不会进行评估
- python - 从数据框python中选择2种类型的行