diff --git a/internal/core/application.go b/internal/core/application.go index 80c2764..ce85f66 100644 --- a/internal/core/application.go +++ b/internal/core/application.go @@ -75,7 +75,7 @@ func NewApplication(configPath string) (*Application, error) { pigBatchRepo := repository.NewGormPigBatchRepository(storage.GetDB()) // 初始化事务管理器 - unitOfWork := repository.NewGormUnitOfWork(storage.GetDB()) + unitOfWork := repository.NewGormUnitOfWork(storage.GetDB(), logger) // --- 业务逻辑处理器初始化 --- pigFarmService := service.NewPigFarmService(pigFarmRepo, logger) diff --git a/internal/infra/repository/unit_of_work.go b/internal/infra/repository/unit_of_work.go index 0d45573..7929476 100644 --- a/internal/infra/repository/unit_of_work.go +++ b/internal/infra/repository/unit_of_work.go @@ -3,6 +3,7 @@ package repository import ( "fmt" + "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" "gorm.io/gorm" ) @@ -16,30 +17,30 @@ type UnitOfWork interface { // gormUnitOfWork 是 UnitOfWork 接口的 GORM 实现 type gormUnitOfWork struct { - db *gorm.DB + db *gorm.DB + logger *logs.Logger // 添加日志记录器 } // NewGormUnitOfWork 创建一个新的 gormUnitOfWork 实例 -func NewGormUnitOfWork(db *gorm.DB) UnitOfWork { - return &gormUnitOfWork{db: db} +func NewGormUnitOfWork(db *gorm.DB, logger *logs.Logger) UnitOfWork { + return &gormUnitOfWork{db: db, logger: logger} } // ExecuteInTransaction 实现了 UnitOfWork 接口的事务执行逻辑 func (u *gormUnitOfWork) ExecuteInTransaction(fn func(tx *gorm.DB) error) error { tx := u.db.Begin() if tx.Error != nil { + u.logger.Errorf("开启数据库事务失败: %v", tx.Error) // 记录错误日志 return fmt.Errorf("开启事务失败: %w", tx.Error) } defer func() { if r := recover(); r != nil { tx.Rollback() - // 可以选择在此处记录 panic 日志 - // u.logger.Errorf("事务中发生 panic,已回滚: %v", r) + u.logger.Errorf("事务中发生 panic,已回滚: %v", r) // 记录 panic 日志 } else if tx.Error != nil { // 如果函数执行过程中返回错误,或者事务本身有错误,则回滚 tx.Rollback() - // 可以选择在此处记录错误日志 - // u.logger.Errorf("事务执行失败,已回滚: %v", tx.Error) + u.logger.Errorf("事务执行失败,已回滚: %v", tx.Error) // 记录错误日志 } }() @@ -51,6 +52,7 @@ func (u *gormUnitOfWork) ExecuteInTransaction(fn func(tx *gorm.DB) error) error // 提交事务 if err := tx.Commit().Error; err != nil { + u.logger.Errorf("提交数据库事务失败: %v", err) // 记录错误日志 return fmt.Errorf("提交事务失败: %w", err) }