diff --git a/pkg/kopia/kopia_log.go b/pkg/kopia/kopia_log.go index ec08c81c0..8315e2685 100644 --- a/pkg/kopia/kopia_log.go +++ b/pkg/kopia/kopia_log.go @@ -18,6 +18,7 @@ limitations under the License. import ( "context" + "io" "github.com/kopia/kopia/repo/logging" "github.com/sirupsen/logrus" @@ -30,6 +31,10 @@ type kopiaLog struct { logger logrus.FieldLogger } +type repoLog struct { + logger logrus.FieldLogger +} + // SetupKopiaLog sets the Kopia log handler to the specific context, Kopia modules // call the logger in the context to write logs func SetupKopiaLog(ctx context.Context, logger logrus.FieldLogger) context.Context { @@ -39,6 +44,10 @@ func SetupKopiaLog(ctx context.Context, logger logrus.FieldLogger) context.Conte }) } +func RepositoryLogger(logger logrus.FieldLogger) io.Writer { + return &repoLog{logger: logger} +} + // Enabled decides whether a given logging level is enabled when logging a message func (kl *kopiaLog) Enabled(level zapcore.Level) bool { entry := kl.logger.WithField("null", "null") @@ -160,3 +169,9 @@ func (kl *kopiaLog) logrusFieldsForWrite(ent zapcore.Entry, fields []zapcore.Fie return copied } + +func (rl *repoLog) Write(p []byte) (int, error) { + rl.logger.Debug(string(p)) + + return len(p), nil +} diff --git a/pkg/repository/udmrepo/kopialib/lib_repo.go b/pkg/repository/udmrepo/kopialib/lib_repo.go index 23fe4e7e6..18d2cea50 100644 --- a/pkg/repository/udmrepo/kopialib/lib_repo.go +++ b/pkg/repository/udmrepo/kopialib/lib_repo.go @@ -19,6 +19,7 @@ package kopialib import ( "context" "encoding/json" + "io" "os" "strings" "sync/atomic" @@ -74,7 +75,9 @@ type kopiaObjectWriter struct { rawWriter object.Writer } -type openOptions struct{} +type openOptions struct { + repoLogger io.Writer +} const ( defaultLogInterval = time.Second * 10 @@ -154,7 +157,7 @@ func (ks *kopiaRepoService) Open(ctx context.Context, repoOption udmrepo.RepoOpt repoCtx := kopia.SetupKopiaLog(ctx, ks.logger) - r, err := openKopiaRepo(repoCtx, repoConfig, repoOption.RepoPassword, nil) + r, err := openKopiaRepo(repoCtx, repoConfig, repoOption.RepoPassword, &openOptions{repoLogger: kopia.RepositoryLogger(ks.logger)}) if err != nil { return nil, err } @@ -199,7 +202,7 @@ func (ks *kopiaRepoService) Maintain(ctx context.Context, repoOption udmrepo.Rep ks.logger.Info("Start to open repo for maintenance, allow index write on load") - r, err := openKopiaRepo(repoCtx, repoConfig, repoOption.RepoPassword, nil) + r, err := openKopiaRepo(repoCtx, repoConfig, repoOption.RepoPassword, &openOptions{repoLogger: kopia.RepositoryLogger(ks.logger)}) if err != nil { return err } @@ -625,8 +628,10 @@ func (lt *logThrottle) shouldLog() bool { return false } -func openKopiaRepo(ctx context.Context, configFile string, password string, _ *openOptions) (repo.Repository, error) { - r, err := kopiaRepoOpen(ctx, configFile, password, &repo.Options{}) +func openKopiaRepo(ctx context.Context, configFile string, password string, options *openOptions) (repo.Repository, error) { + r, err := kopiaRepoOpen(ctx, configFile, password, &repo.Options{ + ContentLogWriter: options.repoLogger, + }) if os.IsNotExist(err) { return nil, errors.Wrap(err, "error to open repo, repo doesn't exist") } diff --git a/pkg/repository/udmrepo/kopialib/repo_init.go b/pkg/repository/udmrepo/kopialib/repo_init.go index dc5c3b686..ade9039d7 100644 --- a/pkg/repository/udmrepo/kopialib/repo_init.go +++ b/pkg/repository/udmrepo/kopialib/repo_init.go @@ -32,6 +32,7 @@ import ( "github.com/kopia/kopia/repo/maintenance" "github.com/pkg/errors" + "github.com/vmware-tanzu/velero/pkg/kopia" "github.com/vmware-tanzu/velero/pkg/repository/udmrepo" "github.com/vmware-tanzu/velero/pkg/repository/udmrepo/kopialib/backend" ) @@ -354,7 +355,7 @@ func (b *byteBufferReader) Seek(offset int64, whence int) (int64, error) { var funcGetParam = maintenance.GetParams func writeInitParameters(ctx context.Context, repoOption udmrepo.RepoOptions, logger logrus.FieldLogger) error { - r, err := openKopiaRepo(ctx, repoOption.ConfigFilePath, repoOption.RepoPassword, nil) + r, err := openKopiaRepo(ctx, repoOption.ConfigFilePath, repoOption.RepoPassword, &openOptions{repoLogger: kopia.RepositoryLogger(logger)}) if err != nil { return err }