在Golang中,我们通常使用第三方日志库来记录和分析请求。这里以流行的logrus
库为例,介绍如何在Golang日志中分析请求。
logrus
库:go get github.com/sirupsen/logrus
logrus
库:import (
"github.com/sirupsen/logrus"
)
logrus
实例:var log = logrus.New()
func handleRequest(w http.ResponseWriter, r *http.Request) {
requestID := r.Header.Get("X-Request-ID")
if requestID == "" {
requestID = uuid.New().String()
}
ctx := context.WithValue(r.Context(), "requestID", requestID)
log.WithFields(logrus.Fields{
"requestID": requestID,
"method": r.Method,
"url": r.URL.String(),
}).Info("Request received")
// 处理请求...
}
func handleRequest(w http.ResponseWriter, r *http.Request) {
// ...
start := time.Now()
// 关键步骤1
// ...
elapsed := time.Since(start)
log.WithFields(logrus.Fields{
"requestID": requestID,
"step": "step1",
"duration": elapsed,
}).Info("Step completed")
// 关键步骤2
// ...
elapsed = time.Since(start)
log.WithFields(logrus.Fields{
"requestID": requestID,
"step": "step2",
"duration": elapsed,
}).Info("Step completed")
// ...
}
func handleRequest(w http.ResponseWriter, r *http.Request) {
// ...
start := time.Now()
// 处理请求...
elapsed := time.Since(start)
statusCode := w.WriteHeader(200) // 假设响应状态码为200
log.WithFields(logrus.Fields{
"requestID": requestID,
"statusCode": statusCode,
"duration": elapsed,
}).Info("Request completed")
}
通过以上步骤,你可以在Golang日志中分析请求的相关信息,例如请求ID、方法、URL、状态码和耗时等。这些信息有助于你了解系统的运行状况,找出性能瓶颈并进行优化。