2013-06-21 18:35:47 +02:00
|
|
|
package logging
|
|
|
|
|
|
|
|
import (
|
2013-06-25 16:53:42 +02:00
|
|
|
"errors"
|
2013-06-21 18:35:47 +02:00
|
|
|
"fmt"
|
|
|
|
"strings"
|
2016-04-28 14:17:23 +02:00
|
|
|
"sync"
|
2013-06-21 18:35:47 +02:00
|
|
|
)
|
|
|
|
|
2016-04-28 14:17:23 +02:00
|
|
|
var (
|
|
|
|
loggers map[string]*Logger
|
|
|
|
lock sync.Mutex
|
|
|
|
)
|
2013-06-21 18:35:47 +02:00
|
|
|
|
|
|
|
type Level byte
|
|
|
|
|
|
|
|
const (
|
|
|
|
DEBUG Level = iota
|
|
|
|
INFO
|
|
|
|
WARNING
|
|
|
|
ERROR
|
|
|
|
CRITICAL
|
|
|
|
FATAL
|
|
|
|
DEFAULT_LEVEL = INFO
|
|
|
|
)
|
|
|
|
|
|
|
|
var levelNames = [6]string{"DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "FATAL"}
|
|
|
|
|
|
|
|
func (l Level) Name() string {
|
|
|
|
return levelNames[l]
|
|
|
|
}
|
|
|
|
|
2013-06-25 16:53:42 +02:00
|
|
|
func LevelByName(l string) (Level, error) {
|
|
|
|
for pos, name := range levelNames {
|
|
|
|
if name == l {
|
|
|
|
return Level(pos), nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return DEBUG, errors.New(fmt.Sprintf("Invalid log level %s", l))
|
|
|
|
}
|
|
|
|
|
2013-06-21 18:35:47 +02:00
|
|
|
type Formatter func(*Record) string
|
|
|
|
|
2014-08-18 13:03:24 +02:00
|
|
|
func GetLogger(name string) (l *Logger) {
|
2016-04-28 14:17:23 +02:00
|
|
|
lock.Lock()
|
|
|
|
defer lock.Unlock()
|
|
|
|
|
2014-08-18 13:03:24 +02:00
|
|
|
if name == "" {
|
|
|
|
name = "default"
|
|
|
|
}
|
|
|
|
l, ok := loggers[name]
|
|
|
|
if !ok {
|
|
|
|
l = NewLogger(name)
|
|
|
|
backend := NewStdoutBackend()
|
|
|
|
l.AddBackend(backend)
|
|
|
|
l.SetLevel(DEBUG)
|
|
|
|
loggers[name] = l
|
|
|
|
}
|
|
|
|
return l
|
2013-06-21 18:35:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
var defaultFormatter Formatter = func(r *Record) string {
|
2014-08-27 17:42:42 +02:00
|
|
|
return fmt.Sprintf("%s [%-8s] %s: %s\n",
|
2014-08-18 13:03:24 +02:00
|
|
|
r.Timestamp.Format("2006/01/02 15:04:05"), r.Level.Name(), r.Logger,
|
2013-06-21 18:35:47 +02:00
|
|
|
strings.TrimSpace(r.Message))
|
|
|
|
}
|
|
|
|
|
2014-10-22 11:32:57 +02:00
|
|
|
var basicFormatter Formatter = func(r *Record) string {
|
|
|
|
return fmt.Sprintf("%s: %s", r.Logger, strings.TrimSpace(r.Message))
|
|
|
|
}
|
|
|
|
|
2013-06-21 18:35:47 +02:00
|
|
|
func init() {
|
2014-08-18 13:03:24 +02:00
|
|
|
loggers = make(map[string]*Logger, 3)
|
|
|
|
|
|
|
|
logger := NewLogger("default")
|
2013-06-21 18:35:47 +02:00
|
|
|
backend := NewStdoutBackend()
|
|
|
|
logger.AddBackend(backend)
|
|
|
|
logger.SetLevel(DEBUG)
|
2014-08-18 13:03:24 +02:00
|
|
|
|
|
|
|
loggers["default"] = logger
|
2013-06-21 18:35:47 +02:00
|
|
|
}
|