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

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

排查 Golang WEB 框架 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不输出日志问题,不妨看看是否是日志文件夹不存在导致。

给TA打赏
共{{data.count}}人
人已打赏
技术教程

密码强度与长度校验正则表达式

2022-11-29 15:06:31

技术教程

脱离 Docker!直接安装 Vaultwarden (BitWarden_rs) 并可自动更新脚本

2023-1-8 9:58:49

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索