您的位置 首页 golang

「golang」Gin把日志输出到文件中

gin产生的日志默认是输出到控制台,平时我们都是输出到日志文件中好方便归档和问题定位,

本文将介绍服务产生的日志如何输出到文件中

在使用 gin.Default() 创建默认 router 时,其实只是对在原始 router 上默认为你添加了 Logger() 和 Recovery() 两个中间件。

添加 Logger 中间件后有请求进来就会打印请求信息日志,包含当前时间、状态码、请求耗时、客户端 IP、请求路径等信息。支持根据状态码和请求方法的不同在终端展示出不同的背景色。

Logger 中间件对应源码地址:

gin.Logger

Logger 中间件会获取请求相关信息,并通过 LoggerConfig 来控制这些信息的打印输出。

gin 提供了 4 个方法来创建日志中间件:

  1. Logger() 以默认配置创建日志中间件,将所有请求信息按指定格式打印到标准输出。
  2. LoggerWithWriter(out io.Writer, notlogged …string) 可以自行设置日志输出位置和不打印日志的 URL 路径,日志格式使用默认配置。
  3. LoggerWithFormatter(f LogFormatter) 可以设置自定义的日志格式打印全部请求信息到标准输出,需要自己实现 func(param LogFormatterParams) string 函数,可以参考默认的格式函数defaultLogFormatter。
  4. LoggerWithConfig(conf LoggerConfig) 可以自定义 LogFormatter 日志内容格式化函数,io.Writer 类型的日志输出位置(默认为stdout) 和 SkipPaths 列表(其中设置的 URL 路径将不打印日志,默认为空)。

使用默认的Logger():

 func main(){
  router := gin.New()
router.Use(gin.Logger())
  router.Run()
}
  

使用LoggerWithWriter(out io.Writer, notlogged …string):

 func main(){
  file, err := os.OpenFile("app.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
panic("日志文件打开失败" + err.Error())
}
  defer file.Close()
  router := gin.New()
router.Use(gin.LoggerWithWriter(file))
  router.Run()
}
  

这样我们可以把请求日志全部写入到文件中

那要如何把log.Println的日志也写入到这个文件中要怎么做呢, 这时候就需要配置log了

 func main(){
  file, err := os.OpenFile("app.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
panic("日志文件打开失败" + err.Error())
}
defer file.Close()
router := gin.New()
writer := io.MultiWriter(os.Stdout, file)
log.SetOutput(writer)
log.SetPrefix("apps")
log.SetFlags(log.LstdFlags | log.Lshortfile | log.LUTC)
router.Use(gin.LoggerWithWriter(writer, "/favicon.ico"))
  router.Run()
}  

使用io.MultiWriter 可以把日志同时写入到stdout 和文件中

文章来源:智云一二三科技

文章标题:「golang」Gin把日志输出到文件中

文章地址:https://www.zhihuclub.com/86726.shtml

关于作者: 智云科技

热门文章

网站地图