Files
gluetun/internal/dns/logs.go

68 lines
1.6 KiB
Go
Raw Normal View History

2021-01-26 04:17:22 +00:00
package dns
import (
"context"
2021-01-26 04:17:22 +00:00
"regexp"
"strings"
"github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/golibs/logging"
)
func (l *Loop) collectLines(ctx context.Context, done chan<- struct{},
stdout, stderr chan string) {
defer close(done)
2021-01-26 04:17:22 +00:00
var line string
2021-01-26 04:17:22 +00:00
for {
select {
case <-ctx.Done():
// Context should only be canceled after stdout and stderr are done
// being written to.
close(stdout)
close(stderr)
2021-01-26 04:17:22 +00:00
return
case line = <-stderr:
case line = <-stdout:
2021-01-26 04:17:22 +00:00
}
2021-01-26 04:17:22 +00:00
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
}