如何在Go-Gorm中禁用默认错误记录器

时间:2019-04-28 16:01:13

标签: mysql go error-handling go-gorm

我在MySQL上使用GORM,遇到并处理了错误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

我很困惑,因为我处理了错误,但仍然可以打印出来。如何防止将此错误打印到错误日志?还是我可以正确处理错误?

1 个答案:

答案 0 :(得分:4)

使用db.LogMode使默认错误记录器静音。

  

LogMode设置日志模式,true表示详细日志,false表示无日志,默认情况下,只会打印错误日志。

db.LogMode(false)应该做得到!