57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
package logging
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"os"
 | 
						|
	"strconv"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/go-logr/logr"
 | 
						|
	zaplib "go.uber.org/zap"
 | 
						|
	"go.uber.org/zap/zapcore"
 | 
						|
	"sigs.k8s.io/controller-runtime/pkg/log/zap"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	LogLevelDebug = "debug"
 | 
						|
	LogLevelInfo  = "info"
 | 
						|
	LogLevelWarn  = "warn"
 | 
						|
	LogLevelError = "error"
 | 
						|
)
 | 
						|
 | 
						|
func NewLogger(logLevel string) logr.Logger {
 | 
						|
	log := zap.New(func(o *zap.Options) {
 | 
						|
		switch logLevel {
 | 
						|
		case LogLevelDebug:
 | 
						|
			o.Development = true
 | 
						|
			lvl := zaplib.NewAtomicLevelAt(zaplib.DebugLevel) // maps to logr's V(1)
 | 
						|
			o.Level = &lvl
 | 
						|
		case LogLevelInfo:
 | 
						|
			lvl := zaplib.NewAtomicLevelAt(zaplib.InfoLevel)
 | 
						|
			o.Level = &lvl
 | 
						|
		case LogLevelWarn:
 | 
						|
			lvl := zaplib.NewAtomicLevelAt(zaplib.WarnLevel)
 | 
						|
			o.Level = &lvl
 | 
						|
		case LogLevelError:
 | 
						|
			lvl := zaplib.NewAtomicLevelAt(zaplib.ErrorLevel)
 | 
						|
			o.Level = &lvl
 | 
						|
		default:
 | 
						|
			// We use bitsize of 8 as zapcore.Level is a type alias to int8
 | 
						|
			levelInt, err := strconv.ParseInt(logLevel, 10, 8)
 | 
						|
			if err != nil {
 | 
						|
				fmt.Fprintf(os.Stderr, "Failed to parse --log-level=%s: %v", logLevel, err)
 | 
						|
				os.Exit(1)
 | 
						|
			}
 | 
						|
 | 
						|
			// For example, --log-level=debug a.k.a --log-level=-1 maps to zaplib.DebugLevel, which is associated to logr's V(1)
 | 
						|
			// --log-level=-2 maps the specific custom log level that is associated to logr's V(2).
 | 
						|
			level := zapcore.Level(levelInt)
 | 
						|
			atomicLevel := zaplib.NewAtomicLevelAt(level)
 | 
						|
			o.Level = &atomicLevel
 | 
						|
		}
 | 
						|
		o.TimeEncoder = zapcore.TimeEncoderOfLayout(time.RFC3339)
 | 
						|
	})
 | 
						|
 | 
						|
	return log
 | 
						|
}
 |