summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorUnknown <joe2010xtmf@163.com>2014-05-11 14:37:12 -0400
committerUnknown <joe2010xtmf@163.com>2014-05-11 14:37:12 -0400
commit0970d6cc38a79c57ffe8e3c85687f7c7c49059be (patch)
treee38c3237ff5add6b624115ec8a7595fe32abfde4 /modules
parent98eeec4cbb6967b0e12181f79f2ffc3db00933f8 (diff)
downloadgitea-0970d6cc38a79c57ffe8e3c85687f7c7c49059be.tar.gz
gitea-0970d6cc38a79c57ffe8e3c85687f7c7c49059be.zip
Log to different adapter according to level
Diffstat (limited to 'modules')
-rw-r--r--modules/base/conf.go103
-rw-r--r--modules/log/log.go41
2 files changed, 85 insertions, 59 deletions
diff --git a/modules/base/conf.go b/modules/base/conf.go
index 99bac9006f..c38d335775 100644
--- a/modules/base/conf.go
+++ b/modules/base/conf.go
@@ -70,8 +70,8 @@ var (
MailService *Mailer
OauthService *Oauther
- LogMode string
- LogConfig string
+ LogModes []string
+ LogConfigs []string
Cache cache.Cache
CacheAdapter string
@@ -130,57 +130,62 @@ func newService() {
}
func newLogService() {
+ log.Info("%s %s", AppName, AppVer)
+
// Get and check log mode.
- LogMode = Cfg.MustValue("log", "MODE", "console")
- modeSec := "log." + LogMode
- if _, err := Cfg.GetSection(modeSec); err != nil {
- qlog.Fatalf("Unknown log mode: %s\n", LogMode)
- }
+ LogModes = strings.Split(Cfg.MustValue("log", "MODE", "console"), ",")
+ LogConfigs = make([]string, len(LogModes))
+ for i, mode := range LogModes {
+ mode = strings.TrimSpace(mode)
+ modeSec := "log." + mode
+ if _, err := Cfg.GetSection(modeSec); err != nil {
+ qlog.Fatalf("Unknown log mode: %s\n", mode)
+ }
- // Log level.
- levelName := Cfg.MustValue("log."+LogMode, "LEVEL", "Trace")
- level, ok := logLevels[levelName]
- if !ok {
- qlog.Fatalf("Unknown log level: %s\n", levelName)
- }
+ // Log level.
+ levelName := Cfg.MustValue("log."+mode, "LEVEL", "Trace")
+ level, ok := logLevels[levelName]
+ if !ok {
+ qlog.Fatalf("Unknown log level: %s\n", levelName)
+ }
- // Generate log configuration.
- switch LogMode {
- case "console":
- LogConfig = fmt.Sprintf(`{"level":%s}`, level)
- case "file":
- logPath := Cfg.MustValue(modeSec, "FILE_NAME", "log/gogs.log")
- os.MkdirAll(path.Dir(logPath), os.ModePerm)
- LogConfig = fmt.Sprintf(
- `{"level":%s,"filename":"%s","rotate":%v,"maxlines":%d,"maxsize":%d,"daily":%v,"maxdays":%d}`, level,
- logPath,
- Cfg.MustBool(modeSec, "LOG_ROTATE", true),
- Cfg.MustInt(modeSec, "MAX_LINES", 1000000),
- 1<<uint(Cfg.MustInt(modeSec, "MAX_SIZE_SHIFT", 28)),
- Cfg.MustBool(modeSec, "DAILY_ROTATE", true),
- Cfg.MustInt(modeSec, "MAX_DAYS", 7))
- case "conn":
- LogConfig = fmt.Sprintf(`{"level":"%s","reconnectOnMsg":%v,"reconnect":%v,"net":"%s","addr":"%s"}`, level,
- Cfg.MustBool(modeSec, "RECONNECT_ON_MSG", false),
- Cfg.MustBool(modeSec, "RECONNECT", false),
- Cfg.MustValue(modeSec, "PROTOCOL", "tcp"),
- Cfg.MustValue(modeSec, "ADDR", ":7020"))
- case "smtp":
- LogConfig = fmt.Sprintf(`{"level":"%s","username":"%s","password":"%s","host":"%s","sendTos":"%s","subject":"%s"}`, level,
- Cfg.MustValue(modeSec, "USER", "example@example.com"),
- Cfg.MustValue(modeSec, "PASSWD", "******"),
- Cfg.MustValue(modeSec, "HOST", "127.0.0.1:25"),
- Cfg.MustValue(modeSec, "RECEIVERS", "[]"),
- Cfg.MustValue(modeSec, "SUBJECT", "Diagnostic message from serve"))
- case "database":
- LogConfig = fmt.Sprintf(`{"level":"%s","driver":"%s","conn":"%s"}`, level,
- Cfg.MustValue(modeSec, "Driver"),
- Cfg.MustValue(modeSec, "CONN"))
- }
+ // Generate log configuration.
+ switch mode {
+ case "console":
+ LogConfigs[i] = fmt.Sprintf(`{"level":%s}`, level)
+ case "file":
+ logPath := Cfg.MustValue(modeSec, "FILE_NAME", "log/gogs.log")
+ os.MkdirAll(path.Dir(logPath), os.ModePerm)
+ LogConfigs[i] = fmt.Sprintf(
+ `{"level":%s,"filename":"%s","rotate":%v,"maxlines":%d,"maxsize":%d,"daily":%v,"maxdays":%d}`, level,
+ logPath,
+ Cfg.MustBool(modeSec, "LOG_ROTATE", true),
+ Cfg.MustInt(modeSec, "MAX_LINES", 1000000),
+ 1<<uint(Cfg.MustInt(modeSec, "MAX_SIZE_SHIFT", 28)),
+ Cfg.MustBool(modeSec, "DAILY_ROTATE", true),
+ Cfg.MustInt(modeSec, "MAX_DAYS", 7))
+ case "conn":
+ LogConfigs[i] = fmt.Sprintf(`{"level":"%s","reconnectOnMsg":%v,"reconnect":%v,"net":"%s","addr":"%s"}`, level,
+ Cfg.MustBool(modeSec, "RECONNECT_ON_MSG", false),
+ Cfg.MustBool(modeSec, "RECONNECT", false),
+ Cfg.MustValue(modeSec, "PROTOCOL", "tcp"),
+ Cfg.MustValue(modeSec, "ADDR", ":7020"))
+ case "smtp":
+ LogConfigs[i] = fmt.Sprintf(`{"level":"%s","username":"%s","password":"%s","host":"%s","sendTos":"%s","subject":"%s"}`, level,
+ Cfg.MustValue(modeSec, "USER", "example@example.com"),
+ Cfg.MustValue(modeSec, "PASSWD", "******"),
+ Cfg.MustValue(modeSec, "HOST", "127.0.0.1:25"),
+ Cfg.MustValue(modeSec, "RECEIVERS", "[]"),
+ Cfg.MustValue(modeSec, "SUBJECT", "Diagnostic message from serve"))
+ case "database":
+ LogConfigs[i] = fmt.Sprintf(`{"level":"%s","driver":"%s","conn":"%s"}`, level,
+ Cfg.MustValue(modeSec, "Driver"),
+ Cfg.MustValue(modeSec, "CONN"))
+ }
- log.Info("%s %s", AppName, AppVer)
- log.NewLogger(Cfg.MustInt64("log", "BUFFER_LEN", 10000), LogMode, LogConfig)
- log.Info("Log Mode: %s(%s)", strings.Title(LogMode), levelName)
+ log.NewLogger(Cfg.MustInt64("log", "BUFFER_LEN", 10000), mode, LogConfigs[i])
+ log.Info("Log Mode: %s(%s)", strings.Title(mode), levelName)
+ }
}
func newLdapService() {
diff --git a/modules/log/log.go b/modules/log/log.go
index 636ea787ca..eea3c8ada1 100644
--- a/modules/log/log.go
+++ b/modules/log/log.go
@@ -10,8 +10,7 @@ import (
)
var (
- logger *logs.BeeLogger
- Mode, Config string
+ loggers []*logs.BeeLogger
)
func init() {
@@ -19,32 +18,54 @@ func init() {
}
func NewLogger(bufLen int64, mode, config string) {
- Mode, Config = mode, config
- logger = logs.NewLogger(bufLen)
+ logger := logs.NewLogger(bufLen)
+
+ isExist := false
+ for _, l := range loggers {
+ if l.Adapter == mode {
+ isExist = true
+ l = logger
+ }
+ }
+ if !isExist {
+ loggers = append(loggers, logger)
+ }
logger.SetLogFuncCallDepth(3)
logger.SetLogger(mode, config)
}
func Trace(format string, v ...interface{}) {
- logger.Trace(format, v...)
+ for _, logger := range loggers {
+ logger.Trace(format, v...)
+ }
}
func Debug(format string, v ...interface{}) {
- logger.Debug(format, v...)
+ for _, logger := range loggers {
+ logger.Debug(format, v...)
+ }
}
func Info(format string, v ...interface{}) {
- logger.Info(format, v...)
+ for _, logger := range loggers {
+ logger.Info(format, v...)
+ }
}
func Error(format string, v ...interface{}) {
- logger.Error(format, v...)
+ for _, logger := range loggers {
+ logger.Error(format, v...)
+ }
}
func Warn(format string, v ...interface{}) {
- logger.Warn(format, v...)
+ for _, logger := range loggers {
+ logger.Warn(format, v...)
+ }
}
func Critical(format string, v ...interface{}) {
- logger.Critical(format, v...)
+ for _, logger := range loggers {
+ logger.Critical(format, v...)
+ }
}