package main import ( "bytes" "fmt" _ "git.rosy.net.cn/jx-print/controllers" "git.rosy.net.cn/jx-print/globals" "git.rosy.net.cn/jx-print/model" "git.rosy.net.cn/jx-print/routers" _ "git.rosy.net.cn/jx-print/services/api" "git.rosy.net.cn/jx-print/services/misc" "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-gonic/gin" "io" "io/ioutil" "os" "time" ) func main() { gin.DisableConsoleColor() r := gin.New() //r.Use(session(model.SessionKey)) f, _ := os.Create("jx-print.log") //gin.DefaultWriter = io.MultiWriter(f) // 如果需要同时将日志写入文件和控制台,请使用以下代码。 gin.DefaultWriter = io.MultiWriter(f, os.Stdout) r.Use(gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string { // your custom format return fmt.Sprintf("%s - [%s] \"%s %s %d \" %s\"\n", param.ClientIP, param.TimeStamp.Format(time.RFC3339), param.Method, param.Path, param.StatusCode, param.ErrorMessage, ) })) r.Use(gin.Recovery()) r.Use(middleware()) routers.Init(r) misc.Init() r.Run(":8999") } func middleware() gin.HandlerFunc { return func(c *gin.Context) { data, _ := ioutil.ReadAll(c.Request.Body) globals.SugarLogger.Debugf("Begin API :%s, params: %v, ip: %s, method %s", c.Request.URL, string(data), c.ClientIP(), c.Request.Method) c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(data)) } } // 中间件,处理session func session(keyPairs string) gin.HandlerFunc { store := sessionConfig() return sessions.Sessions(keyPairs, store) } func sessionConfig() sessions.Store { sessionMaxAge := 3600 sessionSecret := model.SessionKey var store sessions.Store store = cookie.NewStore([]byte(sessionSecret)) store.Options(sessions.Options{ MaxAge: sessionMaxAge, //seconds Path: "/", }) return store }