tools/minimalImageBuildTool/pkg/logger/logger.go (62 lines of code) (raw):
package logger
import (
"os"
"sync"
"github.com/go-logr/logr"
)
const (
maxLogging = 9
markPass = "✅ "
markSuccess = "🎉 "
markFailed = "❌ "
markWarning = "⚠️"
)
var (
l logr.Logger = logr.Discard()
once sync.Once
)
func set(logger logr.Logger) {
once.Do(func() {
l = logger
})
}
// Get returns the logger instance that has been previously set.
// If no logger has been set, it returns a null logger.
func Get() logr.Logger {
return l
}
func MaxLogging() bool {
return l.V(maxLogging).Enabled()
}
func MaxLoggingLevel() int {
return maxLogging
}
// Fatal is equivalent to Get().Error() followed by a call to os.Exit(1).
func Fatal(err error, msg string) {
l.Error(err, msg)
os.Exit(1)
}
// Info logs a non-error message with the given key/value pairs as context.
//
// The msg argument should be used to add some constant description to
// the log line. The key/value pairs can then be used to add additional
// variable information. The key/value pairs should alternate string
// keys and arbitrary values.
func Info(msg string, keysAndValues ...interface{}) {
l.Info(msg, keysAndValues...)
}
// V returns an Logger value for a specific verbosity level, relative to
// this Logger. In other words, V values are additive. V higher verbosity
// level means a log message is less important. It's illegal to pass a log
// level less than zero.
func V(level int) logr.Logger {
return l.V(level)
}
func Error(err error, msg string, keysAndValues ...interface{}) {
l.Error(err, msg, keysAndValues...)
}
func MarkPass(msg string, keysAndValues ...interface{}) {
l.V(0).Info(markPass+msg, keysAndValues...)
}
func MarkSuccess(msg string, keysAndValues ...interface{}) {
l.V(0).Info(markSuccess+msg, keysAndValues...)
}
func MarkFail(msg string, keysAndValues ...interface{}) {
l.V(0).Info(markFailed+msg, keysAndValues...)
}
func MarkWarning(msg string, keysAndValues ...interface{}) {
l.V(0).Info(markWarning+msg, keysAndValues...)
}
type LoggerOpt func(logr *logr.Logger)
func WithName(name string) LoggerOpt {
return func(logr *logr.Logger) {
*logr = (*logr).WithName(name)
}
}