Procházet zdrojové kódy

config: don't log a warning if the config file is not found

we also support configuration via env vars
Nicola Murino před 4 roky
rodič
revize
c3410a3d91
2 změnil soubory, kde provedl 19 přidání a 2 odebrání
  1. 11 2
      config/config.go
  2. 8 0
      config/config_test.go

+ 11 - 2
config/config.go

@@ -2,6 +2,7 @@
 package config
 
 import (
+	"errors"
 	"fmt"
 	"os"
 	"path/filepath"
@@ -369,8 +370,16 @@ func LoadConfig(configDir, configFile string) error {
 	viper.AddConfigPath(".")
 	setConfigFile(configDir, configFile)
 	if err = viper.ReadInConfig(); err != nil {
-		logger.Warn(logSender, "", "error loading configuration file: %v", err)
-		logger.WarnToConsole("error loading configuration file: %v", err)
+		// if the user specify a configuration file we get os.ErrNotExist.
+		// viper.ConfigFileNotFoundError is returned if viper is unable
+		// to find sftpgo.{json,yaml, etc..} in any of the search paths
+		if errors.As(err, &viper.ConfigFileNotFoundError{}) {
+			logger.Debug(logSender, "", "no configuration file found")
+		} else {
+			// should we return the error and not start here?
+			logger.Warn(logSender, "", "error loading configuration file: %v", err)
+			logger.WarnToConsole("error loading configuration file: %v", err)
+		}
 	}
 	err = viper.Unmarshal(&globalConf)
 	if err != nil {

+ 8 - 0
config/config_test.go

@@ -58,6 +58,14 @@ func TestLoadConfigTest(t *testing.T) {
 	assert.NoError(t, err)
 }
 
+func TestLoadConfigFileNotFound(t *testing.T) {
+	reset()
+
+	viper.SetConfigName("configfile")
+	err := config.LoadConfig(os.TempDir(), "")
+	assert.NoError(t, err)
+}
+
 func TestEmptyBanner(t *testing.T) {
 	reset()