diff options
Diffstat (limited to 'modules/setting')
-rw-r--r-- | modules/setting/setting.go | 111 |
1 files changed, 53 insertions, 58 deletions
diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 54a837e2..d5cb0b7c 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -5,7 +5,6 @@ package setting import ( - "fmt" "net/mail" "net/url" "os" @@ -22,12 +21,12 @@ import ( _ "github.com/go-macaron/cache/redis" "github.com/go-macaron/session" _ "github.com/go-macaron/session/redis" + log "gopkg.in/clog.v1" "gopkg.in/ini.v1" "github.com/gogits/go-libravatar" "github.com/gogits/gogs/modules/bindata" - "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/user" ) @@ -180,7 +179,7 @@ var ( // Log settings LogRootPath string LogModes []string - LogConfigs []string + LogConfigs []interface{} // Attachment settings AttachmentPath string @@ -290,11 +289,11 @@ func execPath() (string, error) { func init() { IsWindows = runtime.GOOS == "windows" - log.NewLogger(0, "console", `{"level": 0}`) + log.New(log.CONSOLE, log.ConsoleConfig{}) var err error if AppPath, err = execPath(); err != nil { - log.Fatal(4, "fail to get app path: %v\n", err) + log.Fatal(4, "Fail to get app path: %v\n", err) } // Note: we don't use path.Dir here because it does not handle case @@ -617,82 +616,78 @@ func newService() { Service.EnableCaptcha = sec.Key("ENABLE_CAPTCHA").MustBool() } -var logLevels = map[string]string{ - "Trace": "0", - "Debug": "1", - "Info": "2", - "Warn": "3", - "Error": "4", - "Critical": "5", -} - func newLogService() { - log.Info("%s %s", AppName, AppVer) - if len(BuildTime) > 0 { log.Info("Build Time: %s", BuildTime) log.Info("Build Git Hash: %s", BuildGitHash) } + // Because we always create a console logger as primary logger before all settings are loaded, + // thus if user doesn't set console logger, we should remove it after other loggers are created. + hasConsole := false + // Get and check log mode. LogModes = strings.Split(Cfg.Section("log").Key("MODE").MustString("console"), ",") - LogConfigs = make([]string, len(LogModes)) + LogConfigs = make([]interface{}, len(LogModes)) for i, mode := range LogModes { - mode = strings.TrimSpace(mode) + mode = strings.ToLower(strings.TrimSpace(mode)) sec, err := Cfg.GetSection("log." + mode) if err != nil { - log.Fatal(4, "Unknown log mode: %s", mode) + log.Fatal(4, "Unknown logger mode: %s", mode) } - validLevels := []string{"Trace", "Debug", "Info", "Warn", "Error", "Critical"} - // Log level. - levelName := Cfg.Section("log."+mode).Key("LEVEL").In( - Cfg.Section("log").Key("LEVEL").In("Trace", validLevels), - validLevels) - level, ok := logLevels[levelName] - if !ok { - log.Fatal(4, "Unknown log level: %s", levelName) - } + validLevels := []string{"trace", "info", "warn", "error", "fatal"} + levelName := Cfg.Section("log." + mode).Key("LEVEL").Validate(func(v string) string { + v = strings.ToLower(v) + if com.IsSliceContainsStr(validLevels, v) { + return v + } + return "trace" + }) + level := map[string]log.LEVEL{ + "trace": log.TRACE, + "info": log.INFO, + "warn": log.WARN, + "error": log.ERROR, + "fatal": log.FATAL, + }[levelName] // Generate log configuration. switch mode { case "console": - LogConfigs[i] = fmt.Sprintf(`{"level":%s}`, level) + hasConsole = true + LogConfigs[i] = log.ConsoleConfig{ + Level: level, + BufferSize: Cfg.Section("log").Key("BUFFER_LEN").MustInt64(100), + } case "file": - logPath := sec.Key("FILE_NAME").MustString(path.Join(LogRootPath, "gogs.log")) + logPath := path.Join(LogRootPath, "gogs.log") if err = os.MkdirAll(path.Dir(logPath), os.ModePerm); err != nil { - panic(err.Error()) + log.Fatal(4, "Fail to create log directory '%s': %v", path.Dir(logPath), err) } - LogConfigs[i] = fmt.Sprintf( - `{"level":%s,"filename":"%s","rotate":%v,"maxlines":%d,"maxsize":%d,"daily":%v,"maxdays":%d}`, level, - logPath, - sec.Key("LOG_ROTATE").MustBool(true), - sec.Key("MAX_LINES").MustInt(1000000), - 1<<uint(sec.Key("MAX_SIZE_SHIFT").MustInt(28)), - sec.Key("DAILY_ROTATE").MustBool(true), - sec.Key("MAX_DAYS").MustInt(7)) - case "conn": - LogConfigs[i] = fmt.Sprintf(`{"level":%s,"reconnectOnMsg":%v,"reconnect":%v,"net":"%s","addr":"%s"}`, level, - sec.Key("RECONNECT_ON_MSG").MustBool(), - sec.Key("RECONNECT").MustBool(), - sec.Key("PROTOCOL").In("tcp", []string{"tcp", "unix", "udp"}), - sec.Key("ADDR").MustString(":7020")) - case "smtp": - LogConfigs[i] = fmt.Sprintf(`{"level":%s,"username":"%s","password":"%s","host":"%s","sendTos":["%s"],"subject":"%s"}`, level, - sec.Key("USER").MustString("example@example.com"), - sec.Key("PASSWD").MustString("******"), - sec.Key("HOST").MustString("127.0.0.1:25"), - strings.Replace(sec.Key("RECEIVERS").MustString(""), ",", `","`, -1), - sec.Key("SUBJECT").MustString("Diagnostic message from serve")) - case "database": - LogConfigs[i] = fmt.Sprintf(`{"level":%s,"driver":"%s","conn":"%s"}`, level, - sec.Key("DRIVER").String(), - sec.Key("CONN").String()) + LogConfigs[i] = log.FileConfig{ + Level: level, + BufferSize: Cfg.Section("log").Key("BUFFER_LEN").MustInt64(100), + Filename: logPath, + FileRotationConfig: log.FileRotationConfig{ + Rotate: sec.Key("LOG_ROTATE").MustBool(true), + Daily: sec.Key("DAILY_ROTATE").MustBool(true), + MaxSize: 1 << uint(sec.Key("MAX_SIZE_SHIFT").MustInt(28)), + MaxLines: sec.Key("MAX_LINES").MustInt64(1000000), + MaxDays: sec.Key("MAX_DAYS").MustInt64(7), + }, + } } - log.NewLogger(Cfg.Section("log").Key("BUFFER_LEN").MustInt64(10000), mode, LogConfigs[i]) - log.Info("Log Mode: %s(%s)", strings.Title(mode), levelName) + log.New(log.MODE(mode), LogConfigs[i]) + log.Trace("Log Mode: %s (%s)", strings.Title(mode), strings.Title(levelName)) + } + + // Make sure everyone gets version info printed. + log.Info("%s %s", AppName, AppVer) + if !hasConsole { + log.Delete(log.CONSOLE) } } |