当前位置: 首页 > 软件编程 > Golang > Golang WEB框架Gin不输出日志问题

Golang WEB框架Gin不输出日志问题

发布于:2022-11-28 Golang 0条评论 5,017 views
本站提供Linux服务器运维,自动化脚本编写等服务,如有需要请联系博主微信:xiaozme

最近一个新项目使用了Golang WEB框架Gin,之前也用过这个框架,都挺好的,但最近发现一个奇怪的问题就是Gin没有输出任何日志内容。(包括终端和日志文件)

代码分析

先上代码:

// 启动Gin
func Start() {
    //Gin运行默认
    RunMode := controller.ConfigGet("servers.RunMode")
    gin.SetMode(RunMode)

    //日志记录到文件
    f, _ := os.Create("logs/run.log")
    gin.DefaultWriter = io.MultiWriter(f)
    //日志同时输出到控制台
    gin.DefaultWriter = io.MultiWriter(f, os.Stdout)

    //运行Gin
    r := gin.Default()

    //使用跨域中间件
    r.Use(cors())

    //路由配置
    r.GET("/api/check/icmp", auth(), controller.CheckIcmp)
    r.GET("/api/check/tcp", auth(), controller.CheckTcp)

    //获取服务端配置
    port := controller.ConfigGet("servers.port")
    r.Run(port)
}

乍一看,这代码似乎没有什么问题,而且启动的时候没有任何报错。一开始以为是Gin的BUG,但是对比了其它项目的Gin版本,都是一样的,而且代码内容几乎一样。网上也没有搜到类似的情况。

问题解决

最后经过长时间的折腾发现问题出在f, _ := os.Create("logs/run.log")这一行代码,os.Create()只会创建文件,而如果父级目录不存在的话,是不会自动创建目录的,从而导致logs/run.log并没有创建成功,从而影响了Gin框架的日志输出。

那么要解决这个问题,有2个办法:

  1. 提前创建好日志文件夹logs这个目录
  2. 或者先判断日志目录是否存在,不存在则用os.Mkdir()函数创建

最后

还是怪自己粗心大意,开发还是要认真严谨才行。如果你也有遇到类似Gin不输出日志问题,不妨看看是否是日志文件夹不存在导致。


标签: ,

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注