引言本文沿袭上述(GolangGinWeb框架2-文件上传/程序死机后的自定义处理方法),继续探索GinWeb框架将日志记录到文件中。使用io.MultiWritermultiwriter可以实现日志记录到文件同时输出到文件Consolepackagemainimport("github.com/gin-gonic/gin""io""os")funcmain(){//DisableConsoleColor,youdon'tneedconsolecolorwritingthelogstofile.//禁用控制台日志颜色,当日志写入文件时,不需要打开控制台日志颜色gin.DisableConsoleColor()//Loggingtoafile。新建一个日志文件,获取文件结构,文件结构实现了Writer接口f,_:=os.Create("gin.log")//io.MultiWriter(multi-writer方法)创建一个writer,追加将传入的多个writer放入一个writer数组中,生成的writer实现了Writer接口,将要写入的数据Write给每个writer,就像Unix命令tee一样,将数据写入文件并打印到thestandardoutputatthetime//配置Gin默认的logwriter为获取到的multi-writergin.DefaultWriter=io.MultiWriter(f)//如果需要同时将日志写入文件和控制台,使用如下代码time.//使用以下代码将日志写入文件,同时输出到控制台//gin.DefaultWriter=io.MultiWriter(f,os.Stdout)router:=gin.Default()router.GET("/ping",func(c*gin.Context){c.String(200,"pong")})router.Run(":8080")}使用Gin的LoggerWithFormatter方法自定义日志格式Instantiatealogger指定日志格式的Logger中间件packagemainimport("fmt""github.com/gin-gonic/gin""time")funcmain(){router:=gin.New()//LoggerWithFormatter中间件会写logstogin.DefaultWriter//Bydefaultgin.DefaultWriter=os.Stdout//typeLogFormatterfunc(paramsLogFormatterParams)string这里的LogFormatterParams是一个结构router.Use(gin.LoggerWithFormatter(func(paramgin.LogFormatterParams)string{//yourcustomformat//127.0.0.1-[Sun,22Nov202017:09:53CST]"GET/pingHTTP/1.120056.113μs"curl/7.64.1""returnfmt.Sprintf("%s-[%s]\"%s%s%s%d%s\"%s\"%s\"\n",参数.ClientIP,//请求客户端的IP地址param.TimeStamp.Format(time.RFC1123),//请求时间param.Method,//请求方法param.Path,//路由路径param.Request.Proto,//请求协议param.StatusCode,//http响应码param.Latency,//从请求到响应的延迟param.Request.UserAgent(),//客户端代理param.ErrorMessage,//如果有错误,也打印错误信息)}))router.Use(gin.Recovery())router.GET("/ping",func(c*gin.Context){c.String(200,"pong")})router.Run(":8080")}//模拟请求测试:curlhttp://localhost:8080/ping开启/关闭日志颜色gin.DisableConsoleColor()关闭日志颜色gin.ForceConsoleColor()强制开启日志颜色,使用虚拟终端TTY配色方案packagemainimport("github.com/gingonic/gin")funcmain(){//默认输出到控制台的日志颜色根据你使用的虚拟终端TTY来着色//Disablelog'scolor禁用日志颜色gin.DisableConsoleColor()//Forcelog'scolor强制开启log颜色//gin.ForceConsoleColor()//创建ginrouterwithdefaultmiddleware://loggerandrecovery(crash-free)middlewarerouter:=gin.Default()router.GET("/ping",func(c*gin.Context){c.String(200,"pong")})router.Run(":8080")}//模拟请求测试:curlhttp://localhost:8080/ping参考Gin官方仓库文档:https:///github.com/gin-gonic/gin
