aboutsummaryrefslogtreecommitdiff
path: root/modules/setting
diff options
context:
space:
mode:
Diffstat (limited to 'modules/setting')
-rw-r--r--modules/setting/setting.go111
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)
}
}