github.com/ngocphuongnb/tetua@v0.0.7-alpha/app/middlewares/request.go (about)

     1  package middlewares
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/google/uuid"
     7  	"github.com/ngocphuongnb/tetua/app/logger"
     8  	"github.com/ngocphuongnb/tetua/app/server"
     9  )
    10  
    11  const HEADER_REQUEST_ID = "X-Request-Id"
    12  
    13  func RequestID(c server.Context) error {
    14  	requestId := c.Header(HEADER_REQUEST_ID)
    15  
    16  	if requestId == "" {
    17  		requestId = uuid.NewString()
    18  	}
    19  
    20  	c.Locals("request_id", requestId)
    21  	c.Header(HEADER_REQUEST_ID, requestId)
    22  
    23  	return c.Next()
    24  }
    25  
    26  func RequestLog(c server.Context) error {
    27  	start := time.Now()
    28  	err := c.Next()
    29  	latency := time.Since(start).Round(time.Millisecond)
    30  	logContext := logger.Context{
    31  		"latency": latency.String(),
    32  		"status":  c.Response().StatusCode(),
    33  		"method":  c.Method(),
    34  		"path":    c.Path(),
    35  		"ip":      c.IP(),
    36  	}
    37  
    38  	if err != nil {
    39  		logContext["error"] = err.Error()
    40  	}
    41  
    42  	c.Logger().Info("Request completed", logContext)
    43  	return nil
    44  }