change log
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
|
||||
"go.uber.org/fx"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"tyapi-server/internal/application/certification"
|
||||
@@ -75,8 +76,28 @@ func NewContainer() *Container {
|
||||
|
||||
// 基础设施模块
|
||||
fx.Provide(
|
||||
// 日志器 - 提供自定义Logger和*zap.Logger
|
||||
func(cfg *config.Config) (logger.Logger, error) {
|
||||
// 日志器 - 提供自定义Logger和*zap.Logger
|
||||
func(cfg *config.Config) (logger.Logger, error) {
|
||||
if cfg.Logger.EnableLevelSeparation {
|
||||
// 使用按级别分文件的日志器
|
||||
levelConfig := logger.LevelLoggerConfig{
|
||||
BaseConfig: logger.Config{
|
||||
Level: cfg.Logger.Level,
|
||||
Format: cfg.Logger.Format,
|
||||
Output: cfg.Logger.Output,
|
||||
LogDir: cfg.Logger.LogDir,
|
||||
MaxSize: cfg.Logger.MaxSize,
|
||||
MaxBackups: cfg.Logger.MaxBackups,
|
||||
MaxAge: cfg.Logger.MaxAge,
|
||||
Compress: cfg.Logger.Compress,
|
||||
UseDaily: cfg.Logger.UseDaily,
|
||||
},
|
||||
EnableLevelSeparation: true,
|
||||
LevelConfigs: convertLevelConfigs(cfg.Logger.LevelConfigs),
|
||||
}
|
||||
return logger.NewLevelLogger(levelConfig)
|
||||
} else {
|
||||
// 使用普通日志器
|
||||
logCfg := logger.Config{
|
||||
Level: cfg.Logger.Level,
|
||||
Format: cfg.Logger.Format,
|
||||
@@ -89,16 +110,21 @@ func NewContainer() *Container {
|
||||
UseDaily: cfg.Logger.UseDaily,
|
||||
}
|
||||
return logger.NewLogger(logCfg)
|
||||
},
|
||||
// 提供普通的*zap.Logger(用于大多数场景)
|
||||
func(log logger.Logger) *zap.Logger {
|
||||
if zapLogger, ok := log.(*logger.ZapLogger); ok {
|
||||
return zapLogger.GetZapLogger()
|
||||
}
|
||||
// 如果类型转换失败,创建一个默认的zap logger
|
||||
defaultLogger, _ := zap.NewProduction()
|
||||
return defaultLogger
|
||||
},
|
||||
}
|
||||
},
|
||||
// 提供普通的*zap.Logger(用于大多数场景)
|
||||
func(log logger.Logger) *zap.Logger {
|
||||
if zapLogger, ok := log.(*logger.ZapLogger); ok {
|
||||
return zapLogger.GetZapLogger()
|
||||
}
|
||||
// 如果类型转换失败,创建一个默认的zap logger
|
||||
defaultLogger, _ := zap.NewProduction()
|
||||
return defaultLogger
|
||||
},
|
||||
// 提供业务日志记录器
|
||||
func(logger *zap.Logger) *middleware.BusinessLogger {
|
||||
return middleware.NewBusinessLogger(logger)
|
||||
},
|
||||
// 数据库连接
|
||||
func(cfg *config.Config, cacheService interfaces.CacheService, logger *zap.Logger) (*gorm.DB, error) {
|
||||
dbCfg := database.Config{
|
||||
@@ -532,6 +558,8 @@ func RegisterLifecycleHooks(
|
||||
// RegisterMiddlewares 注册中间件
|
||||
func RegisterMiddlewares(
|
||||
router *sharedhttp.GinRouter,
|
||||
panicRecovery *middleware.PanicRecoveryMiddleware,
|
||||
comprehensiveLogger *middleware.ComprehensiveLoggerMiddleware,
|
||||
requestID *middleware.RequestIDMiddleware,
|
||||
security *middleware.SecurityHeadersMiddleware,
|
||||
responseTime *middleware.ResponseTimeMiddleware,
|
||||
@@ -542,6 +570,9 @@ func RegisterMiddlewares(
|
||||
errorTrackingMiddleware *middleware.ErrorTrackingMiddleware,
|
||||
requestBodyLogger *middleware.RequestBodyLoggerMiddleware,
|
||||
) {
|
||||
// 注册所有中间件(按优先级顺序)
|
||||
router.RegisterMiddleware(panicRecovery)
|
||||
router.RegisterMiddleware(comprehensiveLogger)
|
||||
router.RegisterMiddleware(requestID)
|
||||
router.RegisterMiddleware(security)
|
||||
router.RegisterMiddleware(responseTime)
|
||||
@@ -593,6 +624,26 @@ func RegisterRoutes(
|
||||
|
||||
// ================ 中间件包装函数 ================
|
||||
|
||||
// NewPanicRecoveryMiddlewareWrapper 创建Panic恢复中间件包装器
|
||||
func NewPanicRecoveryMiddlewareWrapper(logger *zap.Logger) *middleware.PanicRecoveryMiddleware {
|
||||
return middleware.NewPanicRecoveryMiddleware(logger)
|
||||
}
|
||||
|
||||
// NewComprehensiveLoggerMiddlewareWrapper 创建全面日志中间件包装器
|
||||
func NewComprehensiveLoggerMiddlewareWrapper(logger *zap.Logger, cfg *config.Config) *middleware.ComprehensiveLoggerMiddleware {
|
||||
config := &middleware.ComprehensiveLoggerConfig{
|
||||
EnableRequestLogging: true,
|
||||
EnableResponseLogging: true,
|
||||
EnableRequestBodyLogging: cfg.App.IsDevelopment(), // 开发环境记录请求体
|
||||
EnableErrorLogging: true,
|
||||
EnableBusinessLogging: true,
|
||||
EnablePerformanceLogging: true,
|
||||
MaxBodySize: 1024 * 10, // 10KB
|
||||
ExcludePaths: []string{"/health", "/metrics", "/favicon.ico", "/swagger"},
|
||||
}
|
||||
return middleware.NewComprehensiveLoggerMiddleware(logger, config)
|
||||
}
|
||||
|
||||
// NewRequestLoggerMiddlewareWrapper 创建请求日志中间件包装器
|
||||
func NewRequestLoggerMiddlewareWrapper(logger *zap.Logger, cfg *config.Config, tracer *tracing.Tracer) *middleware.RequestLoggerMiddleware {
|
||||
return middleware.NewRequestLoggerMiddleware(logger, cfg.App.IsDevelopment(), tracer)
|
||||
@@ -603,6 +654,35 @@ func NewRequestBodyLoggerMiddlewareWrapper(logger *zap.Logger, cfg *config.Confi
|
||||
return middleware.NewRequestBodyLoggerMiddleware(logger, cfg.App.IsDevelopment(), tracer)
|
||||
}
|
||||
|
||||
// ================ 辅助函数 ================
|
||||
|
||||
// convertLevelConfigs 转换级别配置
|
||||
func convertLevelConfigs(configs map[string]config.LevelFileConfig) map[zapcore.Level]logger.LevelFileConfig {
|
||||
result := make(map[zapcore.Level]logger.LevelFileConfig)
|
||||
|
||||
levelMap := map[string]zapcore.Level{
|
||||
"debug": zapcore.DebugLevel,
|
||||
"info": zapcore.InfoLevel,
|
||||
"warn": zapcore.WarnLevel,
|
||||
"error": zapcore.ErrorLevel,
|
||||
"fatal": zapcore.FatalLevel,
|
||||
"panic": zapcore.PanicLevel,
|
||||
}
|
||||
|
||||
for levelStr, config := range configs {
|
||||
if level, exists := levelMap[levelStr]; exists {
|
||||
result[level] = logger.LevelFileConfig{
|
||||
MaxSize: config.MaxSize,
|
||||
MaxBackups: config.MaxBackups,
|
||||
MaxAge: config.MaxAge,
|
||||
Compress: config.Compress,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
// ================ Redis相关工厂函数 ================
|
||||
|
||||
// NewRedisClient 创建Redis客户端
|
||||
|
||||
Reference in New Issue
Block a user