add:viper: allow to disable internal log messages

This commit is contained in:
Quentin Burgess 2023-01-03 14:58:15 +01:00 committed by Márk Sági-Kazár
parent 2ee16310d0
commit 98b1b9fd42
1 changed files with 16 additions and 4 deletions

View File

@ -205,6 +205,7 @@ type Viper struct {
automaticEnvApplied bool automaticEnvApplied bool
envKeyReplacer StringReplacer envKeyReplacer StringReplacer
allowEmptyEnv bool allowEmptyEnv bool
logMessage bool
parents []string parents []string
config map[string]interface{} config map[string]interface{}
@ -242,6 +243,7 @@ func New() *Viper {
v.aliases = make(map[string]string) v.aliases = make(map[string]string)
v.typeByDefValue = false v.typeByDefValue = false
v.logger = jwwLogger{} v.logger = jwwLogger{}
v.logMessage = true
v.resetEncoding() v.resetEncoding()
@ -270,6 +272,14 @@ func KeyDelimiter(d string) Option {
}) })
} }
// DisableMessageLog block any kind of messages to be logged.
// By default, all messages are logged.
func DisableMessageLog() Option {
return optionFunc(func(v *Viper) {
v.logMessage = false
})
}
// StringReplacer applies a set of replacements to a string. // StringReplacer applies a set of replacements to a string.
type StringReplacer interface { type StringReplacer interface {
// Replace returns a copy of s with all replacements performed. // Replace returns a copy of s with all replacements performed.
@ -440,14 +450,16 @@ func (v *Viper) WatchConfig() {
initWG.Add(1) initWG.Add(1)
go func() { go func() {
watcher, err := newWatcher() watcher, err := newWatcher()
if err != nil { if err != nil && v.logMessage {
log.Fatal(err) log.Fatal(err)
} }
defer watcher.Close() defer watcher.Close()
// we have to watch the entire directory to pick up renames/atomic saves in a cross-platform way // we have to watch the entire directory to pick up renames/atomic saves in a cross-platform way
filename, err := v.getConfigFile() filename, err := v.getConfigFile()
if err != nil { if err != nil {
if v.logMessage {
log.Printf("error: %v\n", err) log.Printf("error: %v\n", err)
}
initWG.Done() initWG.Done()
return return
} }
@ -475,7 +487,7 @@ func (v *Viper) WatchConfig() {
(currentConfigFile != "" && currentConfigFile != realConfigFile) { (currentConfigFile != "" && currentConfigFile != realConfigFile) {
realConfigFile = currentConfigFile realConfigFile = currentConfigFile
err := v.ReadInConfig() err := v.ReadInConfig()
if err != nil { if err != nil && v.logMessage {
log.Printf("error reading config file: %v\n", err) log.Printf("error reading config file: %v\n", err)
} }
if v.onConfigChange != nil { if v.onConfigChange != nil {
@ -487,7 +499,7 @@ func (v *Viper) WatchConfig() {
} }
case err, ok := <-watcher.Errors: case err, ok := <-watcher.Errors:
if ok { // 'Errors' channel is not closed if ok && v.logMessage { // 'Errors' channel is not closed
log.Printf("watcher error: %v\n", err) log.Printf("watcher error: %v\n", err)
} }
eventsWG.Done() eventsWG.Done()