pkg/xcontext/logger/logger.go (41 lines of code) (raw):
// Copyright (c) Facebook, Inc. and its affiliates.
//
// This source code is licensed under the MIT license found in the
// LICENSE file in the root directory of this source tree.
package logger
import (
"github.com/facebookincubator/contest/pkg/xcontext/logger/internal"
)
// Logger is the interface of a logger provided by an extended context.
//
// This is the complete logger with all the required methods/features.
type Logger = internal.Logger
// MinimalLogger is the interfaces of a logger without contextual methods.
type MinimalLogger = internal.MinimalLogger
// ConvertLogger converts arbitrary logger to Logger. If it was unable to
// then it returns a nil.
//
// To enable logadapter-s for this converter add imports, for example:
//
// import _ "github.com/facebookincubator/contest/pkg/xcontext/logger/logadapter/logrus"
// import _ "github.com/facebookincubator/contest/pkg/xcontext/logger/logadapter/zap"
func ConvertLogger(logger interface{}) Logger {
if l, ok := logger.(Logger); ok {
return l
}
for _, adapter := range adapters {
if convertedLogger := adapter.Convert(logger); convertedLogger != nil {
return convertedLogger
}
}
switch logger := logger.(type) {
case internal.MinimalLogger:
return internal.WrapMinimalLogger(logger)
case internal.MinimalLoggerCompact:
return internal.WrapMinimalLoggerCompact(logger)
case func(format string, args ...interface{}):
return internal.WrapPrintf(logger)
case func(format string, args ...interface{}) (int, error):
return internal.WrapPrintf(func(format string, args ...interface{}) {
_, _ = logger(format, args...)
})
}
return nil
}
// Adapter defines an adapter to convert a logger to Logger.
type Adapter interface {
Convert(backend interface{}) Logger
}
var (
adapters []Adapter
)
// RegisterAdapter registers an Adapter to be used by ConvertLogger.
func RegisterAdapter(adapter Adapter) {
adapters = append(adapters, adapter)
}
// Dummy returns a dummy logger which implements Logger, but does nothing.
func Dummy() Logger {
return ConvertLogger(internal.DummyLogger{})
}