mirror of
https://github.com/safing/portbase
synced 2025-09-04 11:40:23 +00:00
Improve logging
This commit is contained in:
parent
ed61819be7
commit
bd362db87e
2 changed files with 47 additions and 8 deletions
|
@ -90,7 +90,7 @@ var (
|
||||||
startedSignal = make(chan struct{})
|
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) {
|
func SetPkgLevels(levels map[string]Severity) {
|
||||||
pkgLevelsLock.Lock()
|
pkgLevelsLock.Lock()
|
||||||
pkgLevels = levels
|
pkgLevels = levels
|
||||||
|
@ -103,7 +103,7 @@ func UnSetPkgLevels() {
|
||||||
pkgLevelsActive.UnSet()
|
pkgLevelsActive.UnSet()
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetLogLevel sets a new log level.
|
// SetLogLevel sets a new log level. Only effective after Start().
|
||||||
func SetLogLevel(level Severity) {
|
func SetLogLevel(level Severity) {
|
||||||
atomic.StoreUint32(logLevel, uint32(level))
|
atomic.StoreUint32(logLevel, uint32(level))
|
||||||
}
|
}
|
||||||
|
@ -138,7 +138,7 @@ func Start() (err error) {
|
||||||
|
|
||||||
initialLogLevel := ParseLevel(logLevelFlag)
|
initialLogLevel := ParseLevel(logLevelFlag)
|
||||||
if initialLogLevel > 0 {
|
if initialLogLevel > 0 {
|
||||||
atomic.StoreUint32(logLevel, uint32(initialLogLevel))
|
SetLogLevel(initialLogLevel)
|
||||||
} else {
|
} else {
|
||||||
err = fmt.Errorf("log warning: invalid log level \"%s\", falling back to level info", logLevelFlag)
|
err = fmt.Errorf("log warning: invalid log level \"%s\", falling back to level info", logLevelFlag)
|
||||||
fmt.Fprintf(os.Stderr, "%s\n", err.Error())
|
fmt.Fprintf(os.Stderr, "%s\n", err.Error())
|
||||||
|
|
|
@ -2,6 +2,8 @@ package log
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"runtime/debug"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -39,16 +41,51 @@ func writeLine(line *logLine, duplicates uint64) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func startWriter() {
|
func startWriter() {
|
||||||
shutdownWaitGroup.Add(1)
|
|
||||||
fmt.Println(fmt.Sprintf("%s%s %s BOF%s", InfoLevel.color(), time.Now().Format(timeFormat), rightArrow, endColor()))
|
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 currentLine *logLine
|
||||||
var nextLine *logLine
|
var nextLine *logLine
|
||||||
var duplicates uint64
|
var duplicates uint64
|
||||||
defer shutdownWaitGroup.Done()
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
// reset
|
// reset
|
||||||
|
@ -106,7 +143,9 @@ func writer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// write final line
|
// write final line
|
||||||
writeLine(currentLine, duplicates)
|
if currentLine != nil {
|
||||||
|
writeLine(currentLine, duplicates)
|
||||||
|
}
|
||||||
// reset state
|
// reset state
|
||||||
currentLine = nil //nolint:ineffassign
|
currentLine = nil //nolint:ineffassign
|
||||||
nextLine = nil
|
nextLine = nil
|
||||||
|
|
Loading…
Add table
Reference in a new issue