2018-11-09 17:25:50 +00:00
|
|
|
package logging
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
|
|
|
|
glogging "github.com/op/go-logging"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Logger = glogging.Logger
|
|
|
|
|
|
|
|
const (
|
2018-11-10 11:47:30 +00:00
|
|
|
debugDefaultFmt = `%{color} %{time:15:04:05.000} %{level:.4s} %{shortfunc:.10s}: %{color:reset} %{message}`
|
2018-11-20 17:33:37 +00:00
|
|
|
debugFmt = `%{color} %{time:15:04:05.000} %{level:.4s} [%{module:.4s}] %{shortfile}:%{shortfunc:.10s}: %{color:reset} %{message}`
|
2022-11-17 22:03:18 +00:00
|
|
|
releaseFmt = `%{color}[%{level:.4s}]%{color:reset} %{message}`
|
2018-11-09 17:25:50 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
2022-11-17 22:03:18 +00:00
|
|
|
stdoutBackend = glogging.NewLogBackend(os.Stderr, "", 0)
|
|
|
|
nullBackend = glogging.NewLogBackend(new(NullWriter), "", 0)
|
|
|
|
|
2018-11-10 11:47:30 +00:00
|
|
|
debugFormatter = glogging.MustStringFormatter(debugFmt)
|
|
|
|
debugDefaultFormatter = glogging.MustStringFormatter(debugDefaultFmt)
|
|
|
|
releaseFormatter = glogging.MustStringFormatter(releaseFmt)
|
2018-11-09 17:25:50 +00:00
|
|
|
|
2018-11-10 11:47:30 +00:00
|
|
|
debugBackend = glogging.NewBackendFormatter(stdoutBackend, debugFormatter)
|
|
|
|
debugDefaultBackend = glogging.NewBackendFormatter(stdoutBackend, debugDefaultFormatter)
|
|
|
|
releaseBackend = glogging.NewBackendFormatter(stdoutBackend, releaseFormatter)
|
2022-12-10 01:48:50 +00:00
|
|
|
silentBackend = glogging.NewBackendFormatter(nullBackend, debugDefaultFormatter)
|
2018-11-10 11:47:30 +00:00
|
|
|
|
2022-11-17 22:03:18 +00:00
|
|
|
loggers map[string]*glogging.Logger
|
2018-11-10 11:47:30 +00:00
|
|
|
|
|
|
|
// Default debug leveledBacked
|
|
|
|
leveledDefaultDebug = glogging.AddModuleLevel(debugDefaultBackend)
|
|
|
|
leveledDebug = glogging.AddModuleLevel(debugBackend)
|
|
|
|
leveledRelease = glogging.AddModuleLevel(releaseBackend)
|
2022-12-10 01:48:50 +00:00
|
|
|
leveledSilent = glogging.AddModuleLevel(silentBackend)
|
2022-11-17 22:03:18 +00:00
|
|
|
|
|
|
|
LoggingLevels = map[int]int{
|
|
|
|
Release: int(glogging.WARNING),
|
|
|
|
Info: int(glogging.INFO),
|
|
|
|
Debug: int(glogging.DEBUG),
|
|
|
|
}
|
2018-11-09 17:25:50 +00:00
|
|
|
)
|
|
|
|
|
2022-11-17 22:03:18 +00:00
|
|
|
type NullWriter struct{}
|
|
|
|
|
|
|
|
func (nw *NullWriter) Write(p []byte) (n int, err error) {
|
|
|
|
return len(p), nil
|
2018-11-10 11:47:30 +00:00
|
|
|
}
|
|
|
|
|
2018-11-09 17:25:50 +00:00
|
|
|
func GetLogger(module string) *glogging.Logger {
|
2018-11-10 11:47:30 +00:00
|
|
|
logger := glogging.MustGetLogger(module)
|
|
|
|
if len(module) > 0 {
|
|
|
|
loggers[module] = logger
|
|
|
|
} else {
|
|
|
|
loggers["default"] = logger
|
|
|
|
}
|
|
|
|
|
2022-11-17 22:03:18 +00:00
|
|
|
if LoggingMode >= Info {
|
|
|
|
// fmt.Println("setting backend to >= info")
|
2018-11-10 11:47:30 +00:00
|
|
|
if len(module) > 0 {
|
|
|
|
logger.SetBackend(leveledDebug)
|
|
|
|
} else {
|
|
|
|
logger.SetBackend(leveledDefaultDebug)
|
|
|
|
}
|
|
|
|
} else {
|
2022-11-17 22:03:18 +00:00
|
|
|
// fmt.Println("setting backend to release")
|
2018-11-10 11:47:30 +00:00
|
|
|
logger.SetBackend(leveledRelease)
|
|
|
|
}
|
|
|
|
|
2022-11-17 22:03:18 +00:00
|
|
|
// setting log level for logger
|
|
|
|
glogging.SetLevel(glogging.Level(LoggingLevels[LoggingMode]), module)
|
|
|
|
|
|
|
|
// Register which loggers to use
|
2018-11-10 11:47:30 +00:00
|
|
|
return logger
|
2018-11-09 17:25:50 +00:00
|
|
|
}
|
|
|
|
|
2022-11-17 22:03:18 +00:00
|
|
|
func setLogLevel(lvl int) {
|
|
|
|
for k, logger := range loggers {
|
|
|
|
// fmt.Printf("setting log level to:%v for %v\n ", LoggingLevels[lvl], k)
|
|
|
|
glogging.SetLevel(glogging.Level(LoggingLevels[lvl]), k)
|
|
|
|
|
|
|
|
if lvl >= Info {
|
|
|
|
// fmt.Println("setting backend to debug for ", k)
|
|
|
|
logger.SetBackend(leveledDebug)
|
2022-12-10 01:48:50 +00:00
|
|
|
} else if lvl == -1 {
|
|
|
|
logger.SetBackend(leveledSilent)
|
|
|
|
} else {
|
2022-11-17 22:03:18 +00:00
|
|
|
logger.SetBackend(leveledRelease)
|
|
|
|
// fmt.Println("setting backend to release for ", k)
|
2018-11-10 11:47:30 +00:00
|
|
|
}
|
|
|
|
}
|
2018-11-09 17:25:50 +00:00
|
|
|
}
|
|
|
|
|
2022-12-10 01:48:50 +00:00
|
|
|
//FIX: Suppress output during testing
|
|
|
|
|
2018-11-10 11:47:30 +00:00
|
|
|
func init() {
|
2022-11-17 22:03:18 +00:00
|
|
|
initRuntimeMode()
|
|
|
|
|
2018-11-10 11:47:30 +00:00
|
|
|
// init global vars
|
|
|
|
loggers = make(map[string]*glogging.Logger)
|
2022-11-17 22:03:18 +00:00
|
|
|
|
2018-11-10 11:47:30 +00:00
|
|
|
// Sets the default backend for all new loggers
|
2022-12-10 01:48:50 +00:00
|
|
|
//RELEASE: set to release when app released
|
2022-11-17 22:03:18 +00:00
|
|
|
glogging.SetBackend(debugBackend)
|
2018-11-10 11:47:30 +00:00
|
|
|
|
|
|
|
// Release level
|
|
|
|
leveledRelease.SetLevel(glogging.WARNING, "")
|
2018-11-09 17:25:50 +00:00
|
|
|
}
|