在 Gin 框架中,可以通过以下方式完全禁用日志功能:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
// 设置 Gin 为发布模式,这会禁用调试日志
gin.SetMode(gin.ReleaseMode)
// 创建不带任何中间件的路由
r := gin.New()
// 不添加任何日志中间件
// 默认的 gin.Default() 会添加 Logger 和 Recovery 中间件
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
// 启动服务
r.Run(":8080")
}
如果需要更细粒度的控制,可以自定义 Recovery 中间件来禁用 panic 日志:
package main
import (
"github.com/gin-gonic/gin"
)
func customRecovery() gin.HandlerFunc {
return func(c *gin.Context) {
defer func() {
if err := recover(); err != nil {
// 不打印任何日志,直接返回 500 错误
c.AbortWithStatus(500)
}
}()
c.Next()
}
}
func main() {
gin.SetMode(gin.ReleaseMode)
r := gin.New()
// 使用自定义的 Recovery 中间件,不记录 panic 信息
r.Use(customRecovery())
r.GET("/panic", func(c *gin.Context) {
panic("test panic")
})
r.GET("/hello", func(c *gin.Context) {
c.String(200, "Hello World")
})
r.Run(":8080")
}
要完全禁用 Gin 内部的所有日志输出,还需要重定向日志输出:
package main
import (
"io/ioutil"
"log"
"github.com/gin-gonic/gin"
)
func main() {
// 将 Gin 的日志输出重定向到空设备
gin.DefaultWriter = ioutil.Discard
// 同时禁用标准库的日志输出
log.SetOutput(ioutil.Discard)
gin.SetMode(gin.ReleaseMode)
r := gin.New()
// 自定义 Recovery 中间件
r.Use(func(c *gin.Context) {
defer func() {
if err := recover(); err != nil {
c.AbortWithStatus(500)
}
}()
c.Next()
})
r.GET("/test", func(c *gin.Context) {
c.JSON(200, gin.H{
"status": "ok",
})
})
r.Run(":8080")
}
这些方法可以确保 Gin 框架不输出任何日志信息到控制台。