2017-08-05 19:34:51 +00:00
|
|
|
package hclog
|
|
|
|
|
|
|
|
import (
|
|
|
|
"sync"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
protect sync.Once
|
|
|
|
def Logger
|
|
|
|
|
2019-04-12 15:51:37 +00:00
|
|
|
// DefaultOptions is used to create the Default logger. These are read
|
|
|
|
// only when the Default logger is created, so set them as soon as the
|
|
|
|
// process starts.
|
2017-08-05 19:34:51 +00:00
|
|
|
DefaultOptions = &LoggerOptions{
|
|
|
|
Level: DefaultLevel,
|
|
|
|
Output: DefaultOutput,
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
2019-04-12 15:51:37 +00:00
|
|
|
// Default returns a globally held logger. This can be a good starting
|
2017-08-05 19:34:51 +00:00
|
|
|
// place, and then you can use .With() and .Name() to create sub-loggers
|
|
|
|
// to be used in more specific contexts.
|
2019-12-18 21:36:50 +00:00
|
|
|
// The value of the Default logger can be set via SetDefault() or by
|
|
|
|
// changing the options in DefaultOptions.
|
|
|
|
//
|
|
|
|
// This method is goroutine safe, returning a global from memory, but
|
|
|
|
// cause should be used if SetDefault() is called it random times
|
|
|
|
// in the program as that may result in race conditions and an unexpected
|
|
|
|
// Logger being returned.
|
2017-08-05 19:34:51 +00:00
|
|
|
func Default() Logger {
|
|
|
|
protect.Do(func() {
|
2019-06-06 19:26:04 +00:00
|
|
|
// If SetDefault was used before Default() was called, we need to
|
|
|
|
// detect that here.
|
|
|
|
if def == nil {
|
|
|
|
def = New(DefaultOptions)
|
|
|
|
}
|
2017-08-05 19:34:51 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
return def
|
|
|
|
}
|
|
|
|
|
2019-04-12 15:51:37 +00:00
|
|
|
// L is a short alias for Default().
|
2017-08-05 19:34:51 +00:00
|
|
|
func L() Logger {
|
|
|
|
return Default()
|
|
|
|
}
|
2019-06-06 19:26:04 +00:00
|
|
|
|
|
|
|
// SetDefault changes the logger to be returned by Default()and L()
|
|
|
|
// to the one given. This allows packages to use the default logger
|
|
|
|
// and have higher level packages change it to match the execution
|
|
|
|
// environment. It returns any old default if there is one.
|
2019-12-18 21:36:50 +00:00
|
|
|
//
|
|
|
|
// NOTE: This is expected to be called early in the program to setup
|
|
|
|
// a default logger. As such, it does not attempt to make itself
|
|
|
|
// not racy with regard to the value of the default logger. Ergo
|
|
|
|
// if it is called in goroutines, you may experience race conditions
|
|
|
|
// with other goroutines retrieving the default logger. Basically,
|
|
|
|
// don't do that.
|
2019-06-06 19:26:04 +00:00
|
|
|
func SetDefault(log Logger) Logger {
|
|
|
|
old := def
|
|
|
|
def = log
|
|
|
|
return old
|
|
|
|
}
|