diff --git a/changelogs/unreleased/9168-priyansh17 b/changelogs/unreleased/9168-priyansh17 new file mode 100644 index 000000000..5d3e83baf --- /dev/null +++ b/changelogs/unreleased/9168-priyansh17 @@ -0,0 +1,6 @@ +### Enhanced Logging Support for UDM Repositories + +- Introduced context-based logger utilities (`WithLogger` and `LoggerFromContext`) in `pkg/repository/udmrepo/logging/context.go` to allow passing and retrieving loggers via context. +- Refactored backend implementations (Azure, GCS, S3, and Filesystem) to use context-based logging instead of passing loggers directly through options or arguments + +**PR:** [#9168](https://github.com/vmware-tanzu/velero/pull/9168) - Add context logger utilities for enhanced logging support \ No newline at end of file diff --git a/pkg/repository/udmrepo/kopialib/backend/azure.go b/pkg/repository/udmrepo/kopialib/backend/azure.go index 090c56bff..f88a759bb 100644 --- a/pkg/repository/udmrepo/kopialib/backend/azure.go +++ b/pkg/repository/udmrepo/kopialib/backend/azure.go @@ -25,6 +25,7 @@ import ( "github.com/vmware-tanzu/velero/pkg/repository/udmrepo" "github.com/vmware-tanzu/velero/pkg/repository/udmrepo/kopialib/backend/azure" + "github.com/vmware-tanzu/velero/pkg/repository/udmrepo/logging" ) type AzureBackend struct { @@ -43,6 +44,6 @@ func (c *AzureBackend) Setup(ctx context.Context, flags map[string]string, logge } func (c *AzureBackend) Connect(ctx context.Context, isCreate bool, logger logrus.FieldLogger) (blob.Storage, error) { - ctx = udmrepo.WithLogger(ctx, logger) + ctx = logging.WithLogger(ctx, logger) return azure.NewStorage(ctx, &c.option, false) } diff --git a/pkg/repository/udmrepo/kopialib/backend/azure/azure_storage_wrapper.go b/pkg/repository/udmrepo/kopialib/backend/azure/azure_storage_wrapper.go index 7d4fad9ff..3b74b807a 100644 --- a/pkg/repository/udmrepo/kopialib/backend/azure/azure_storage_wrapper.go +++ b/pkg/repository/udmrepo/kopialib/backend/azure/azure_storage_wrapper.go @@ -24,6 +24,7 @@ import ( "github.com/kopia/kopia/repo/blob/throttling" "github.com/vmware-tanzu/velero/pkg/repository/udmrepo" + "github.com/vmware-tanzu/velero/pkg/repository/udmrepo/logging" azureutil "github.com/vmware-tanzu/velero/pkg/util/azure" ) @@ -56,7 +57,7 @@ func NewStorage(ctx context.Context, option *Option, isCreate bool) (blob.Storag cfg := option.Config // Get logger from context - logger := udmrepo.LoggerFromContext(ctx) + logger := logging.LoggerFromContext(ctx) client, _, err := azureutil.NewStorageClient(logger, cfg) if err != nil { diff --git a/pkg/repository/udmrepo/kopialib/backend/file_system.go b/pkg/repository/udmrepo/kopialib/backend/file_system.go index f5aa6c891..e94e44a84 100644 --- a/pkg/repository/udmrepo/kopialib/backend/file_system.go +++ b/pkg/repository/udmrepo/kopialib/backend/file_system.go @@ -27,6 +27,7 @@ import ( "github.com/pkg/errors" "github.com/vmware-tanzu/velero/pkg/repository/udmrepo" + "github.com/vmware-tanzu/velero/pkg/repository/udmrepo/logging" ) type FsBackend struct { @@ -50,7 +51,7 @@ func (c *FsBackend) Setup(ctx context.Context, flags map[string]string, logger l c.options.FileMode = defaultFileMode c.options.DirectoryMode = defaultDirMode - ctx = udmrepo.WithLogger(ctx, logger) + ctx = logging.WithLogger(ctx, logger) c.options.Limits = setupLimits(ctx, flags) @@ -61,7 +62,7 @@ func (c *FsBackend) Connect(ctx context.Context, isCreate bool, logger logrus.Fi if !filepath.IsAbs(c.options.Path) { return nil, errors.Errorf("filesystem repository path is not absolute, path: %s", c.options.Path) } - ctx = udmrepo.WithLogger(ctx, logger) + ctx = logging.WithLogger(ctx, logger) return filesystem.New(ctx, &c.options, isCreate) } diff --git a/pkg/repository/udmrepo/kopialib/backend/gcs.go b/pkg/repository/udmrepo/kopialib/backend/gcs.go index 01f43a0af..3eed31e31 100644 --- a/pkg/repository/udmrepo/kopialib/backend/gcs.go +++ b/pkg/repository/udmrepo/kopialib/backend/gcs.go @@ -25,6 +25,7 @@ import ( "github.com/kopia/kopia/repo/blob/gcs" "github.com/vmware-tanzu/velero/pkg/repository/udmrepo" + "github.com/vmware-tanzu/velero/pkg/repository/udmrepo/logging" ) type GCSBackend struct { @@ -46,7 +47,7 @@ func (c *GCSBackend) Setup(ctx context.Context, flags map[string]string, logger c.options.Prefix = optionalHaveString(udmrepo.StoreOptionPrefix, flags) c.options.ReadOnly = optionalHaveBool(ctx, udmrepo.StoreOptionGcsReadonly, flags) - ctx = udmrepo.WithLogger(ctx, logger) + ctx = logging.WithLogger(ctx, logger) c.options.Limits = setupLimits(ctx, flags) @@ -54,6 +55,6 @@ func (c *GCSBackend) Setup(ctx context.Context, flags map[string]string, logger } func (c *GCSBackend) Connect(ctx context.Context, isCreate bool, logger logrus.FieldLogger) (blob.Storage, error) { - ctx = udmrepo.WithLogger(ctx, logger) + ctx = logging.WithLogger(ctx, logger) return gcs.New(ctx, &c.options, false) } diff --git a/pkg/repository/udmrepo/kopialib/backend/s3.go b/pkg/repository/udmrepo/kopialib/backend/s3.go index bd15bae59..77277bd18 100644 --- a/pkg/repository/udmrepo/kopialib/backend/s3.go +++ b/pkg/repository/udmrepo/kopialib/backend/s3.go @@ -25,6 +25,7 @@ import ( "github.com/kopia/kopia/repo/blob/s3" "github.com/vmware-tanzu/velero/pkg/repository/udmrepo" + "github.com/vmware-tanzu/velero/pkg/repository/udmrepo/logging" ) type S3Backend struct { @@ -48,7 +49,7 @@ func (c *S3Backend) Setup(ctx context.Context, flags map[string]string, logger l c.options.SessionToken = optionalHaveString(udmrepo.StoreOptionS3Token, flags) c.options.RootCA = optionalHaveBase64(ctx, udmrepo.StoreOptionCACert, flags) - ctx = udmrepo.WithLogger(ctx, logger) + ctx = logging.WithLogger(ctx, logger) c.options.Limits = setupLimits(ctx, flags) @@ -56,6 +57,6 @@ func (c *S3Backend) Setup(ctx context.Context, flags map[string]string, logger l } func (c *S3Backend) Connect(ctx context.Context, isCreate bool, logger logrus.FieldLogger) (blob.Storage, error) { - ctx = udmrepo.WithLogger(ctx, logger) + ctx = logging.WithLogger(ctx, logger) return s3.New(ctx, &c.options, false) } diff --git a/pkg/repository/udmrepo/logging/context.go b/pkg/repository/udmrepo/logging/context.go new file mode 100644 index 000000000..4ac63d302 --- /dev/null +++ b/pkg/repository/udmrepo/logging/context.go @@ -0,0 +1,38 @@ +/* +Copyright the Velero contributors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package logging + +import ( + "context" + + "github.com/sirupsen/logrus" +) + +type ctxKeyLogger struct{} + +// WithLogger returns a new context with the provided logger. +func WithLogger(ctx context.Context, logger logrus.FieldLogger) context.Context { + return context.WithValue(ctx, ctxKeyLogger{}, logger) +} + +// LoggerFromContext retrieves the logger from the context, or returns a default logger if none found. +func LoggerFromContext(ctx context.Context) logrus.FieldLogger { + if logger, ok := ctx.Value(ctxKeyLogger{}).(logrus.FieldLogger); ok && logger != nil { + return logger + } + return logrus.New() +} diff --git a/pkg/repository/udmrepo/repo.go b/pkg/repository/udmrepo/repo.go index 204146242..7acbd426c 100644 --- a/pkg/repository/udmrepo/repo.go +++ b/pkg/repository/udmrepo/repo.go @@ -20,8 +20,6 @@ import ( "context" "io" "time" - - "github.com/sirupsen/logrus" ) type ID string @@ -159,17 +157,4 @@ type ObjectWriter interface { Result() (ID, error) } -type ctxKeyLogger struct{} -// WithLogger returns a new context with the provided logger. -func WithLogger(ctx context.Context, logger logrus.FieldLogger) context.Context { - return context.WithValue(ctx, ctxKeyLogger{}, logger) -} - -// LoggerFromContext retrieves the logger from the context, or returns a default logger if none found. -func LoggerFromContext(ctx context.Context) logrus.FieldLogger { - if logger, ok := ctx.Value(ctxKeyLogger{}).(logrus.FieldLogger); ok && logger != nil { - return logger - } - return logrus.New() -}