diff --git a/infrastructure/log/web.go b/infrastructure/log/web.go new file mode 100644 index 0000000..b1325fe --- /dev/null +++ b/infrastructure/log/web.go @@ -0,0 +1,49 @@ +package log + +import ( + "time" + + "github.com/gin-gonic/gin" + "github.com/sirupsen/logrus" +) + +func GinLog() gin.HandlerFunc { + logger := GetLogger("web") + + return func(c *gin.Context) { + startTime := time.Now() + c.Next() + endTime := time.Now() + latencyTime := endTime.Sub(startTime) + reqMethod := c.Request.Method + reqUri := c.Request.RequestURI + statusCode := c.Writer.Status() + clientIP := c.ClientIP() + + logger.Infof("[GIN] %v | %3d | %13v | %15s | %-7s %s", + endTime.Format("2006/01/02 - 15:04:05"), + statusCode, + latencyTime, + clientIP, + reqMethod, + reqUri, + ) + } +} + +type recoverLog struct { + logger logrus.FieldLogger +} + +func (r *recoverLog) Write(p []byte) (n int, err error) { + r.logger.Errorln(string(p)) + return len(p), nil +} + +func GinRecoverLog() gin.HandlerFunc { + logger := GetLogger("web") + return func(c *gin.Context) { + writer := &recoverLog{logger: logger} + gin.RecoveryWithWriter(writer)(c) + } +} diff --git a/system/program.go b/system/program.go index cf3ffbd..b5343b6 100644 --- a/system/program.go +++ b/system/program.go @@ -34,6 +34,8 @@ func Init() *http.Server { } router := web.CreateRouter(conf.Debug, &conf.Cors, false) + router.Use(log.GinLog()) + router.Use(log.GinRecoverLog()) reporter := api.NewReporter(conf) reporter.Init(router)