Browse Source

modules/setting: add Slack logger

Conn and email loggers are removed for now unless people requested
for them, then try to add back in gopkg.in/clog.v1
pull/4109/head
Unknwon 8 years ago
parent
commit
d9d329bec8
No known key found for this signature in database
GPG Key ID: FB9F411CDD69BEC1
  1. 10
      conf/app.ini
  2. 4
      modules/bindata/bindata.go
  3. 35
      modules/setting/setting.go

10
conf/app.ini

@ -298,6 +298,7 @@ MAX_FILES = 5
; For more information about the format see http://golang.org/pkg/time/#pkg-constants ; For more information about the format see http://golang.org/pkg/time/#pkg-constants
FORMAT = FORMAT =
; General settings of loggers
[log] [log]
ROOT_PATH = ROOT_PATH =
; Can be "console" and "file", default is "console" ; Can be "console" and "file", default is "console"
@ -310,10 +311,12 @@ LEVEL = Trace
; For "console" mode only ; For "console" mode only
[log.console] [log.console]
; leave empty to inherit
LEVEL = LEVEL =
; For "file" mode only ; For "file" mode only
[log.file] [log.file]
; leave empty to inherit
LEVEL = LEVEL =
; This enables automated log rotate (switch of following options) ; This enables automated log rotate (switch of following options)
LOG_ROTATE = true LOG_ROTATE = true
@ -326,6 +329,13 @@ MAX_LINES = 1000000
; Expired days of log file (delete after max days) ; Expired days of log file (delete after max days)
MAX_DAYS = 7 MAX_DAYS = 7
; For "slack" mode only
[log.slack]
; leave empty to inherit
LEVEL =
; Webhook URL
URL =
[cron] [cron]
; Enable running cron tasks periodically. ; Enable running cron tasks periodically.
ENABLED = true ENABLED = true

4
modules/bindata/bindata.go

File diff suppressed because one or more lines are too long

35
modules/setting/setting.go

@ -626,9 +626,16 @@ func newLogService() {
// thus if user doesn't set console logger, we should remove it after other loggers are created. // thus if user doesn't set console logger, we should remove it after other loggers are created.
hasConsole := false hasConsole := false
// Get and check log mode. // Get and check log modes.
LogModes = strings.Split(Cfg.Section("log").Key("MODE").MustString("console"), ",") LogModes = strings.Split(Cfg.Section("log").Key("MODE").MustString("console"), ",")
LogConfigs = make([]interface{}, len(LogModes)) LogConfigs = make([]interface{}, len(LogModes))
levelNames := map[string]log.LEVEL{
"trace": log.TRACE,
"info": log.INFO,
"warn": log.WARN,
"error": log.ERROR,
"fatal": log.FATAL,
}
for i, mode := range LogModes { for i, mode := range LogModes {
mode = strings.ToLower(strings.TrimSpace(mode)) mode = strings.ToLower(strings.TrimSpace(mode))
sec, err := Cfg.GetSection("log." + mode) sec, err := Cfg.GetSection("log." + mode)
@ -637,30 +644,25 @@ func newLogService() {
} }
validLevels := []string{"trace", "info", "warn", "error", "fatal"} validLevels := []string{"trace", "info", "warn", "error", "fatal"}
levelName := Cfg.Section("log." + mode).Key("LEVEL").Validate(func(v string) string { name := Cfg.Section("log." + mode).Key("LEVEL").Validate(func(v string) string {
v = strings.ToLower(v) v = strings.ToLower(v)
if com.IsSliceContainsStr(validLevels, v) { if com.IsSliceContainsStr(validLevels, v) {
return v return v
} }
return "trace" return "trace"
}) })
level := map[string]log.LEVEL{ level := levelNames[name]
"trace": log.TRACE,
"info": log.INFO,
"warn": log.WARN,
"error": log.ERROR,
"fatal": log.FATAL,
}[levelName]
// Generate log configuration. // Generate log configuration.
switch mode { switch log.MODE(mode) {
case "console": case log.CONSOLE:
hasConsole = true hasConsole = true
LogConfigs[i] = log.ConsoleConfig{ LogConfigs[i] = log.ConsoleConfig{
Level: level, Level: level,
BufferSize: Cfg.Section("log").Key("BUFFER_LEN").MustInt64(100), BufferSize: Cfg.Section("log").Key("BUFFER_LEN").MustInt64(100),
} }
case "file":
case log.FILE:
logPath := path.Join(LogRootPath, "gogs.log") logPath := path.Join(LogRootPath, "gogs.log")
if err = os.MkdirAll(path.Dir(logPath), os.ModePerm); err != nil { if err = os.MkdirAll(path.Dir(logPath), os.ModePerm); err != nil {
log.Fatal(4, "Fail to create log directory '%s': %v", path.Dir(logPath), err) log.Fatal(4, "Fail to create log directory '%s': %v", path.Dir(logPath), err)
@ -678,10 +680,17 @@ func newLogService() {
MaxDays: sec.Key("MAX_DAYS").MustInt64(7), MaxDays: sec.Key("MAX_DAYS").MustInt64(7),
}, },
} }
case log.SLACK:
LogConfigs[i] = log.SlackConfig{
Level: level,
BufferSize: Cfg.Section("log").Key("BUFFER_LEN").MustInt64(100),
URL: sec.Key("URL").String(),
}
} }
log.New(log.MODE(mode), LogConfigs[i]) log.New(log.MODE(mode), LogConfigs[i])
log.Trace("Log Mode: %s (%s)", strings.Title(mode), strings.Title(levelName)) log.Trace("Log Mode: %s (%s)", strings.Title(mode), strings.Title(name))
} }
// Make sure everyone gets version info printed. // Make sure everyone gets version info printed.

Loading…
Cancel
Save