测试一下修复一部分问题

This commit is contained in:
2025-11-11 18:15:39 +08:00
parent 2b1754728f
commit ea0c6a8b16
7 changed files with 234 additions and 34 deletions

View File

@@ -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,
)

View File

@@ -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