Improve logging

This commit is contained in:
Daniel 2019-10-25 13:37:58 +02:00
parent ed61819be7
commit bd362db87e
2 changed files with 47 additions and 8 deletions

View file

@ -90,7 +90,7 @@ var (
startedSignal = make(chan struct{})
)
// SetPkgLevels sets individual log levels for packages.
// SetPkgLevels sets individual log levels for packages. Only effective after Start().
func SetPkgLevels(levels map[string]Severity) {
pkgLevelsLock.Lock()
pkgLevels = levels
@ -103,7 +103,7 @@ func UnSetPkgLevels() {
pkgLevelsActive.UnSet()
}
// SetLogLevel sets a new log level.
// SetLogLevel sets a new log level. Only effective after Start().
func SetLogLevel(level Severity) {
atomic.StoreUint32(logLevel, uint32(level))
}
@ -138,7 +138,7 @@ func Start() (err error) {
initialLogLevel := ParseLevel(logLevelFlag)
if initialLogLevel > 0 {
atomic.StoreUint32(logLevel, uint32(initialLogLevel))
SetLogLevel(initialLogLevel)
} else {
err = fmt.Errorf("log warning: invalid log level \"%s\", falling back to level info", logLevelFlag)
fmt.Fprintf(os.Stderr, "%s\n", err.Error())

View file

@ -2,6 +2,8 @@ package log
import (
"fmt"
"os"
"runtime/debug"
"time"
)
@ -39,16 +41,51 @@ func writeLine(line *logLine, duplicates uint64) {
}
func startWriter() {
shutdownWaitGroup.Add(1)
fmt.Println(fmt.Sprintf("%s%s %s BOF%s", InfoLevel.color(), time.Now().Format(timeFormat), rightArrow, endColor()))
go writer()
shutdownWaitGroup.Add(1)
go writerManager()
}
func writer() {
func writerManager() {
defer shutdownWaitGroup.Done()
for {
err := writer()
if err != nil {
Errorf("log: writer failed: %s", err)
} else {
return
}
}
}
func writer() (err error) {
defer func() {
// recover from panic
panicVal := recover()
if panicVal != nil {
err = fmt.Errorf("%s", panicVal)
// write stack to stderr
fmt.Fprintf(
os.Stderr,
`===== Error Report =====
Message: %s
StackTrace:
%s
===== End of Report =====
`,
err,
string(debug.Stack()),
)
}
}()
var currentLine *logLine
var nextLine *logLine
var duplicates uint64
defer shutdownWaitGroup.Done()
for {
// reset
@ -106,7 +143,9 @@ func writer() {
}
// write final line
writeLine(currentLine, duplicates)
if currentLine != nil {
writeLine(currentLine, duplicates)
}
// reset state
currentLine = nil //nolint:ineffassign
nextLine = nil