Files
gluetun/internal/dns/logs.go

61 lines
1.5 KiB
Go
Raw Normal View History

2021-01-26 04:17:22 +00:00
package dns
import (
"regexp"
"strings"
"github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/golibs/logging"
)
func (l *Loop) collectLines(stdout, stderr <-chan string, done chan<- struct{}) {
defer close(done)
2021-01-26 04:17:22 +00:00
var line string
var ok bool
for {
select {
case line, ok = <-stderr:
case line, ok = <-stdout:
}
if !ok {
return
}
line, level := processLogLine(line)
switch level {
case logging.LevelDebug:
2021-01-26 04:17:22 +00:00
l.logger.Debug(line)
case logging.LevelInfo:
2021-01-26 04:17:22 +00:00
l.logger.Info(line)
case logging.LevelWarn:
2021-01-26 04:17:22 +00:00
l.logger.Warn(line)
case logging.LevelError:
2021-01-26 04:17:22 +00:00
l.logger.Error(line)
}
}
}
var unboundPrefix = regexp.MustCompile(`\[[0-9]{10}\] unbound\[[0-9]+:[0|1]\] `)
func processLogLine(s string) (filtered string, level logging.Level) {
prefix := unboundPrefix.FindString(s)
filtered = s[len(prefix):]
switch {
case strings.HasPrefix(filtered, "notice: "):
filtered = strings.TrimPrefix(filtered, "notice: ")
level = logging.LevelInfo
2021-01-26 04:17:22 +00:00
case strings.HasPrefix(filtered, "info: "):
filtered = strings.TrimPrefix(filtered, "info: ")
level = logging.LevelInfo
2021-01-26 04:17:22 +00:00
case strings.HasPrefix(filtered, "warn: "):
filtered = strings.TrimPrefix(filtered, "warn: ")
level = logging.LevelWarn
2021-01-26 04:17:22 +00:00
case strings.HasPrefix(filtered, "error: "):
filtered = strings.TrimPrefix(filtered, "error: ")
level = logging.LevelError
2021-01-26 04:17:22 +00:00
default:
level = logging.LevelInfo
2021-01-26 04:17:22 +00:00
}
filtered = constants.ColorUnbound().Sprintf(filtered)
return filtered, level
}