【问题标题】:How to disable default error logger in Go-Gorm如何在 Go-Gorm 中禁用默认错误记录器
【发布时间】:2019-09-17 09:49:46
【问题描述】:

我在 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

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

【问题讨论】:

    标签: mysql go error-handling go-gorm


    【解决方案1】:

    更新:对于 gorm v2

    gorm.Config 中使用Logger

    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{
      Logger: logger.Default.LogMode(logger.Silent),
    })
    

    对于戈姆v1

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

    LogMode 设置日志模式,true为详细日志,false为无日志,默认只打印错误日志。

    db.LogMode(false) 应该可以胜任!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      相关资源
      最近更新 更多