gosuki/internal/logging/log.go

110 lines
3.1 KiB
Go
Raw Normal View History

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}`
releaseFmt = `%{color}[%{level:.4s}]%{color:reset} %{message}`
2018-11-09 17:25:50 +00:00
)
var (
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
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)
LoggingLevels = map[int]int{
Release: int(glogging.WARNING),
Info: int(glogging.INFO),
Debug: int(glogging.DEBUG),
}
2018-11-09 17:25:50 +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
}
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 {
// fmt.Println("setting backend to release")
2018-11-10 11:47:30 +00:00
logger.SetBackend(leveledRelease)
}
// 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
}
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 {
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() {
initRuntimeMode()
2018-11-10 11:47:30 +00:00
// init global vars
loggers = make(map[string]*glogging.Logger)
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
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
}