Merge pull request #92347 from rahulchheda/logging

Removed mutex thread locking and unlocking from logging Format registry
This commit is contained in:
Kubernetes Prow Robot 2020-06-25 09:45:53 -07:00 committed by GitHub
commit 66761346af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 16 deletions

View File

@ -63,13 +63,15 @@ func (o *Options) AddFlags(fs *pflag.FlagSet) {
unsupportedFlags := fmt.Sprintf("--%s", strings.Join(unsupportedLoggingFlags(), ", --")) unsupportedFlags := fmt.Sprintf("--%s", strings.Join(unsupportedLoggingFlags(), ", --"))
formats := fmt.Sprintf(`"%s"`, strings.Join(logRegistry.List(), `", "`)) formats := fmt.Sprintf(`"%s"`, strings.Join(logRegistry.List(), `", "`))
fs.StringVar(&o.LogFormat, logFormatFlagName, defaultLogFormat, fmt.Sprintf("Sets the log format. Permitted formats: %s.\nNon-default formats don't honor these flags: %s.\nNon-default choices are currently alpha and subject to change without warning.", formats, unsupportedFlags)) fs.StringVar(&o.LogFormat, logFormatFlagName, defaultLogFormat, fmt.Sprintf("Sets the log format. Permitted formats: %s.\nNon-default formats don't honor these flags: %s.\nNon-default choices are currently alpha and subject to change without warning.", formats, unsupportedFlags))
// No new log formats should be added after generation is of flag options
logRegistry.Freeze()
} }
// Apply set klog logger from LogFormat type // Apply set klog logger from LogFormat type
func (o *Options) Apply() { func (o *Options) Apply() {
// if log format not exists, use nil loggr // if log format not exists, use nil loggr
loggr, _ := o.Get() loggr, _ := o.Get()
klog.SetLogger(loggr) klog.SetLogger(loggr)
} }

View File

@ -18,7 +18,6 @@ package logs
import ( import (
"fmt" "fmt"
"sync"
"github.com/go-logr/logr" "github.com/go-logr/logr"
json "k8s.io/component-base/logs/json" json "k8s.io/component-base/logs/json"
@ -33,21 +32,22 @@ var logRegistry = NewLogFormatRegistry()
// LogFormatRegistry store klog format registry // LogFormatRegistry store klog format registry
type LogFormatRegistry struct { type LogFormatRegistry struct {
registry map[string]logr.Logger registry map[string]logr.Logger
mu sync.Mutex frozen bool
} }
// NewLogFormatRegistry return new init LogFormatRegistry struct // NewLogFormatRegistry return new init LogFormatRegistry struct
func NewLogFormatRegistry() *LogFormatRegistry { func NewLogFormatRegistry() *LogFormatRegistry {
return &LogFormatRegistry{ return &LogFormatRegistry{
registry: make(map[string]logr.Logger), registry: make(map[string]logr.Logger),
mu: sync.Mutex{}, frozen: false,
} }
} }
// Register new log format registry to global logRegistry // Register new log format registry to global logRegistry
func (lfr *LogFormatRegistry) Register(name string, logger logr.Logger) error { func (lfr *LogFormatRegistry) Register(name string, logger logr.Logger) error {
lfr.mu.Lock() if lfr.frozen {
defer lfr.mu.Unlock() return fmt.Errorf("log format is frozen, unable to register log format")
}
if _, ok := lfr.registry[name]; ok { if _, ok := lfr.registry[name]; ok {
return fmt.Errorf("log format: %s already exists", name) return fmt.Errorf("log format: %s already exists", name)
} }
@ -57,8 +57,6 @@ func (lfr *LogFormatRegistry) Register(name string, logger logr.Logger) error {
// Get specified log format logger // Get specified log format logger
func (lfr *LogFormatRegistry) Get(name string) (logr.Logger, error) { func (lfr *LogFormatRegistry) Get(name string) (logr.Logger, error) {
lfr.mu.Lock()
defer lfr.mu.Unlock()
re, ok := lfr.registry[name] re, ok := lfr.registry[name]
if !ok { if !ok {
return nil, fmt.Errorf("log format: %s does not exists", name) return nil, fmt.Errorf("log format: %s does not exists", name)
@ -67,23 +65,27 @@ func (lfr *LogFormatRegistry) Get(name string) (logr.Logger, error) {
} }
// Set specified log format logger // Set specified log format logger
func (lfr *LogFormatRegistry) Set(name string, logger logr.Logger) { func (lfr *LogFormatRegistry) Set(name string, logger logr.Logger) error {
lfr.mu.Lock() if lfr.frozen {
defer lfr.mu.Unlock() return fmt.Errorf("log format is frozen, unable to set log format")
}
lfr.registry[name] = logger lfr.registry[name] = logger
return nil
} }
// Delete specified log format logger // Delete specified log format logger
func (lfr *LogFormatRegistry) Delete(name string) { func (lfr *LogFormatRegistry) Delete(name string) error {
lfr.mu.Lock() if lfr.frozen {
defer lfr.mu.Unlock() return fmt.Errorf("log format is frozen, unable to delete log format")
}
delete(lfr.registry, name) delete(lfr.registry, name)
return nil
} }
// List names of registered log formats // List names of registered log formats
func (lfr *LogFormatRegistry) List() []string { func (lfr *LogFormatRegistry) List() []string {
lfr.mu.Lock()
defer lfr.mu.Unlock()
formats := make([]string, 0, len(lfr.registry)) formats := make([]string, 0, len(lfr.registry))
for f := range lfr.registry { for f := range lfr.registry {
formats = append(formats, f) formats = append(formats, f)
@ -91,6 +93,10 @@ func (lfr *LogFormatRegistry) List() []string {
return formats return formats
} }
// Freeze freezes the log format registry
func (lfr *LogFormatRegistry) Freeze() {
lfr.frozen = true
}
func init() { func init() {
// Text format is default klog format // Text format is default klog format
logRegistry.Register(defaultLogFormat, nil) logRegistry.Register(defaultLogFormat, nil)