diff --git a/backend/Gopkg.lock b/backend/Gopkg.lock index 7d613a7c..ba8e88e0 100644 --- a/backend/Gopkg.lock +++ b/backend/Gopkg.lock @@ -126,12 +126,12 @@ version = "v0.3.1" [[projects]] - digest = "1:01f2a0dea4785957fb0832580a244e693c710130e2785e4a2f73cc7872cdfa82" + digest = "1:479ca4406d1521b92615374d807581ccfdb1b971abc3bac7e29c1fc83c988745" name = "github.com/go-pkgz/lgr" packages = ["."] pruneopts = "UT" - revision = "5bea4c7108c41005f69ad77c05f516b2228837e2" - version = "v0.1.3" + revision = "07dcefe903e40f6c93674e1b85f84764552665b0" + version = "v0.2.0" [[projects]] digest = "1:1212e114344a5cdcc834ea69e19d456eef230f9784659080fee67e02ba2cb574" diff --git a/backend/app/main.go b/backend/app/main.go index 171a8830..c49963ab 100644 --- a/backend/app/main.go +++ b/backend/app/main.go @@ -62,8 +62,10 @@ func main() { func setupLog(dbg bool) { if dbg { - log.Setup(log.Debug, log.Caller) + log.Setup(log.Debug, log.CallerFile, log.Msec, log.LevelBraces) + return } + log.Setup(log.Msec, log.LevelBraces) } // getDump reads runtime stack and returns as a string diff --git a/backend/vendor/github.com/go-pkgz/lgr/interface.go b/backend/vendor/github.com/go-pkgz/lgr/interface.go index 44b97177..a0d9ed4f 100644 --- a/backend/vendor/github.com/go-pkgz/lgr/interface.go +++ b/backend/vendor/github.com/go-pkgz/lgr/interface.go @@ -1,6 +1,9 @@ package lgr -import stdlog "log" +import ( + stdlog "log" + "os" +) var def = New() // default logger doesn't allow DEBUG and doesn't add caller info @@ -31,6 +34,12 @@ func Print(line string) { def.Logf(line) } +// Fatalf simplifies replacement of std logger +func Fatalf(format string, args ...interface{}) { + def.Logf(format, args...) + os.Exit(1) +} + // Setup default logger with options func Setup(opts ...Option) { def = New(opts...) diff --git a/backend/vendor/github.com/go-pkgz/lgr/logger.go b/backend/vendor/github.com/go-pkgz/lgr/logger.go index ac67af91..02808d79 100644 --- a/backend/vendor/github.com/go-pkgz/lgr/logger.go +++ b/backend/vendor/github.com/go-pkgz/lgr/logger.go @@ -14,13 +14,15 @@ var levels = []string{"DEBUG", "INFO", "WARN", "ERROR", "PANIC", "FATAL"} // Logger provided simple logger with basic support of levels. Thread safe type Logger struct { - stdout, stderr io.Writer - dbg bool - lock sync.Mutex - callers bool - now nowFn - fatal panicFn - skipCallers int + stdout, stderr io.Writer + dbg bool + lock sync.Mutex + callerFile, callerFunc bool + now nowFn + fatal panicFn + skipCallers int + levelBraces bool + msec bool } type nowFn func() time.Time @@ -48,24 +50,43 @@ func New(options ...Option) *Logger { // FATAL adds runtime stack and os.exit(1), like panic. func (l *Logger) Logf(format string, args ...interface{}) { + // format timestamp with or without msecs + ts := func() (res string) { + if l.msec { + return l.now().Format("2006/01/02 15:04:05.000 ") + } + return l.now().Format("2006/01/02 15:04:05 ") + } + lv, msg := l.extractLevel(fmt.Sprintf(format, args...)) + if lv == "DEBUG " && !l.dbg { + return + } var bld strings.Builder - bld.WriteString(l.now().Format("2006/01/02 15:04:05.000 ")) + bld.WriteString(ts()) bld.WriteString(lv) - if l.dbg && l.callers { + if l.dbg && (l.callerFile || l.callerFunc) { if pc, file, line, ok := runtime.Caller(l.skipCallers); ok { - fnameElems := strings.Split(file, "/") - funcNameElems := strings.Split(runtime.FuncForPC(pc).Name(), "/") - srcFileInfo := fmt.Sprintf("{%s:%d %s} ", strings.Join(fnameElems[len(fnameElems)-2:], "/"), - line, funcNameElems[len(funcNameElems)-1]) + + funcName := "" + if l.callerFunc { + funcNameElems := strings.Split(runtime.FuncForPC(pc).Name(), "/") + funcName = funcNameElems[len(funcNameElems)-1] + } + fileInfo := "" + if l.callerFile { + fnameElems := strings.Split(file, "/") + fileInfo = fmt.Sprintf("%s:%d", strings.Join(fnameElems[len(fnameElems)-2:], "/"), line) + if l.callerFunc { + fileInfo += " " + } + } + srcFileInfo := fmt.Sprintf("{%s%s} ", fileInfo, funcName) bld.WriteString(srcFileInfo) } } - if lv == "DEBUG " && !l.dbg { - return - } bld.WriteString(msg) //nolint bld.WriteString("\n") //nolint @@ -86,19 +107,27 @@ func (l *Logger) Logf(format string, args ...interface{}) { } func (l *Logger) extractLevel(line string) (level, msg string) { + + brace := func(b string) string { + if l.levelBraces { + return b + } + return "" + } + spaces := " " for _, lv := range levels { if strings.HasPrefix(line, lv) { if len(lv) == 4 { spaces = " " } - return lv + spaces, line[len(lv)+1:] + return brace("[") + lv + brace("]") + spaces, line[len(lv)+1:] } if strings.HasPrefix(line, "["+lv+"]") { if len(lv) == 4 { spaces = " " } - return lv + spaces, line[len(lv)+3:] + return brace("[") + lv + brace("]") + spaces, line[len(lv)+3:] } } return "", line @@ -137,7 +166,22 @@ func Debug(l *Logger) { l.dbg = true } -// Caller adds caller info with func, file, and line number -func Caller(l *Logger) { - l.callers = true +// CallerFile adds caller info with file, and line number +func CallerFile(l *Logger) { + l.callerFile = true +} + +// CallerFunc adds caller info with function name +func CallerFunc(l *Logger) { + l.callerFunc = true +} + +// LevelBraces adds [] to level +func LevelBraces(l *Logger) { + l.levelBraces = true +} + +// Msec adds .msec to timestamp +func Msec(l *Logger) { + l.msec = true }