测试一下修复一部分问题
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"gopkg.in/natefinch/lumberjack.v2"
|
||||
@@ -25,17 +27,17 @@ func InitLoggers(
|
||||
|
||||
// 创建编码器配置
|
||||
encoderConfig := zapcore.EncoderConfig{
|
||||
TimeKey: "timestamp",
|
||||
TimeKey: "time",
|
||||
LevelKey: "level",
|
||||
NameKey: "logger",
|
||||
CallerKey: "caller",
|
||||
MessageKey: "message",
|
||||
MessageKey: "msg",
|
||||
StacktraceKey: "stacktrace",
|
||||
LineEnding: zapcore.DefaultLineEnding,
|
||||
EncodeLevel: zapcore.LowercaseLevelEncoder,
|
||||
EncodeTime: zapcore.ISO8601TimeEncoder, // RFC3339 格式
|
||||
EncodeLevel: zapcore.CapitalColorLevelEncoder, // 使用彩色级别编码器
|
||||
EncodeTime: zapcore.ISO8601TimeEncoder, // 2025-11-11T17:50:52.830+0800 格式
|
||||
EncodeDuration: zapcore.SecondsDurationEncoder,
|
||||
EncodeCaller: zapcore.ShortCallerEncoder,
|
||||
EncodeCaller: zapcore.ShortCallerEncoder, // 输出 middleware/trace.go:58 格式
|
||||
}
|
||||
|
||||
// 选择编码器(开发模式使用控制台,生产使用 JSON)
|
||||
@@ -46,10 +48,21 @@ func InitLoggers(
|
||||
encoder = zapcore.NewJSONEncoder(encoderConfig)
|
||||
}
|
||||
|
||||
// 创建应用日志写入器
|
||||
appWriter := zapcore.AddSync(newLumberjackLogger(appLogConfig))
|
||||
|
||||
// 开发模式下同时输出到控制台
|
||||
if development {
|
||||
appWriter = zapcore.NewMultiWriteSyncer(
|
||||
appWriter,
|
||||
zapcore.AddSync(os.Stdout),
|
||||
)
|
||||
}
|
||||
|
||||
// 创建应用日志核心
|
||||
appCore := zapcore.NewCore(
|
||||
encoder,
|
||||
zapcore.AddSync(newLumberjackLogger(appLogConfig)),
|
||||
appWriter,
|
||||
zapLevel,
|
||||
)
|
||||
|
||||
|
||||
@@ -8,14 +8,39 @@ import (
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
const (
|
||||
// MaxBodyLogSize 限制记录的请求/响应 body 大小为 50KB
|
||||
MaxBodyLogSize = 50 * 1024
|
||||
)
|
||||
|
||||
// truncateBody 截断 body 到指定大小
|
||||
func truncateBody(body []byte, maxSize int) string {
|
||||
if len(body) == 0 {
|
||||
return ""
|
||||
}
|
||||
|
||||
if len(body) <= maxSize {
|
||||
return string(body)
|
||||
}
|
||||
|
||||
// 超过限制,截断并添加提示
|
||||
return string(body[:maxSize]) + "... (truncated)"
|
||||
}
|
||||
|
||||
// Middleware 创建 Fiber 日志中间件
|
||||
// 记录所有 HTTP 请求到访问日志
|
||||
// 记录所有 HTTP 请求到访问日志(包括请求和响应 body)
|
||||
func Middleware() fiber.Handler {
|
||||
return func(c *fiber.Ctx) error {
|
||||
// 记录请求开始时间
|
||||
startTime := time.Now()
|
||||
c.Locals(constants.ContextKeyStartTime, startTime)
|
||||
|
||||
// 获取请求 body(在 c.Next() 之前读取)
|
||||
requestBody := truncateBody(c.Body(), MaxBodyLogSize)
|
||||
|
||||
// 获取 query 参数
|
||||
queryParams := string(c.Request().URI().QueryString())
|
||||
|
||||
// 处理请求
|
||||
err := c.Next()
|
||||
|
||||
@@ -34,17 +59,23 @@ func Middleware() fiber.Handler {
|
||||
userID = uid.(string)
|
||||
}
|
||||
|
||||
// 获取响应 body
|
||||
responseBody := truncateBody(c.Response().Body(), MaxBodyLogSize)
|
||||
|
||||
// 记录访问日志
|
||||
accessLogger := GetAccessLogger()
|
||||
accessLogger.Info("",
|
||||
zap.String("method", c.Method()),
|
||||
zap.String("path", c.Path()),
|
||||
zap.String("query", queryParams),
|
||||
zap.Int("status", c.Response().StatusCode()),
|
||||
zap.Float64("duration_ms", float64(duration.Microseconds())/1000.0),
|
||||
zap.String("request_id", requestID),
|
||||
zap.String("ip", c.IP()),
|
||||
zap.String("user_agent", c.Get("User-Agent")),
|
||||
zap.String(constants.ContextKeyUserID, userID),
|
||||
zap.String("request_body", requestBody),
|
||||
zap.String("response_body", responseBody),
|
||||
)
|
||||
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user