重构日志与可观测性体系
新增单行文本编码器与结构化 GORM 日志,统一错误记录与请求日志策略,收紧日志文件权限并修复按天切分与压缩,支付回调参数脱敏,生产强制阿里云短信,RequestID 校验防注入,日志文案中文化。
This commit is contained in:
@@ -83,9 +83,9 @@ func New(cfg config.Config, deps Dependencies, logger *zap.Logger) *gin.Engine {
|
||||
encryptor, err := crypto.NewFieldEncryptor(primary, legacy)
|
||||
if err != nil {
|
||||
if config.IsProductionEnv(cfg.AppEnv) {
|
||||
logger.Fatal("FIELD_ENCRYPTION_KEY invalid", zap.Error(err))
|
||||
logger.Fatal("业务字段加密密钥无效", zap.Error(err))
|
||||
}
|
||||
logger.Warn("FIELD_ENCRYPTION_KEY invalid, fallback to legacy-only", zap.Error(err))
|
||||
logger.Warn("业务字段加密密钥无效,已回退旧密钥", zap.Error(err))
|
||||
// primary 非法时退回 legacy 单密钥(若有),否则 MockEncryptor
|
||||
if legacy != "" {
|
||||
if e, eErr := crypto.NewFieldEncryptor(legacy); eErr == nil {
|
||||
@@ -100,15 +100,15 @@ func New(cfg config.Config, deps Dependencies, logger *zap.Logger) *gin.Engine {
|
||||
encryptor, err := crypto.NewFieldEncryptor(legacy)
|
||||
if err == nil {
|
||||
fieldEncryptor = encryptor
|
||||
logger.Warn("FIELD_ENCRYPTION_KEY not set, using legacy-only encryptor for dev compatibility")
|
||||
logger.Debug("开发环境使用旧业务字段加密密钥")
|
||||
}
|
||||
}
|
||||
if fieldEncryptor == nil {
|
||||
if config.IsProductionEnv(cfg.AppEnv) {
|
||||
logger.Fatal("FIELD_ENCRYPTION_KEY not set")
|
||||
logger.Fatal("业务字段加密密钥未设置")
|
||||
}
|
||||
fieldEncryptor = &crypto.MockEncryptor{}
|
||||
logger.Warn("FIELD_ENCRYPTION_KEY and legacy both unset, using MockEncryptor")
|
||||
logger.Debug("开发环境使用模拟业务字段加密器")
|
||||
}
|
||||
|
||||
jwtManager := auth.NewJWTManager(cfg.JWTSecret)
|
||||
@@ -245,10 +245,10 @@ func New(cfg config.Config, deps Dependencies, logger *zap.Logger) *gin.Engine {
|
||||
}
|
||||
if encryptor == nil {
|
||||
if config.IsProductionEnv(cfg.AppEnv) {
|
||||
logger.Fatal("PAYMENT_CONFIG_ENCRYPTION_KEY not set or invalid")
|
||||
logger.Fatal("支付配置加密密钥未设置或无效")
|
||||
}
|
||||
encryptor = &paymentconfig.MockEncryptor{}
|
||||
logger.Warn("PAYMENT_CONFIG_ENCRYPTION_KEY not set or invalid, using MockEncryptor")
|
||||
logger.Debug("开发环境使用模拟支付配置加密器")
|
||||
}
|
||||
paymentConfigRepo = paymentconfig.NewRepository(deps.DB, encryptor)
|
||||
paymentConfigService = paymentconfig.NewService(paymentConfigRepo)
|
||||
@@ -331,7 +331,7 @@ func New(cfg config.Config, deps Dependencies, logger *zap.Logger) *gin.Engine {
|
||||
var err error
|
||||
fileStorage, err = filemodule.NewStorage(cfg.Storage)
|
||||
if err != nil {
|
||||
logger.Warn("file storage bucket is not ready; file APIs will retry on request", zap.Error(err))
|
||||
logger.Warn("文件存储桶尚未就绪,接口请求时将重试", zap.Error(err))
|
||||
}
|
||||
}
|
||||
fileService := filemodule.NewService(fileStorage)
|
||||
@@ -766,7 +766,7 @@ func newSMSProvider(cfg config.Config, logger *zap.Logger) smsintegration.Provid
|
||||
LoginTemplateCode: cfg.SMS.AliyunLoginTemplateCode,
|
||||
}, logger)
|
||||
if err != nil {
|
||||
logger.Warn("aliyun sms provider unavailable; sms send will fail", zap.Error(err))
|
||||
logger.Warn("阿里云短信服务初始化失败", zap.Error(err))
|
||||
return smsintegration.NewUnavailableProvider(err)
|
||||
}
|
||||
return provider
|
||||
@@ -784,7 +784,7 @@ func newRealnameProvider(cfg config.Config, encryptor crypto.Encryptor, logger *
|
||||
Encryptor: encryptor,
|
||||
})
|
||||
if err != nil {
|
||||
logger.Warn("cloud market realname provider unavailable; realname verify will fail", zap.Error(err))
|
||||
logger.Warn("实名认证服务初始化失败", zap.Error(err))
|
||||
return realname.NewUnavailableProvider(err)
|
||||
}
|
||||
return provider
|
||||
|
||||
Reference in New Issue
Block a user