Files
gluetun/internal/dns/logs.go

76 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"
2021-09-23 17:05:48 +00:00
)
type logLevel uint8
const (
levelDebug logLevel = iota
levelInfo
levelWarn
levelError
2021-01-26 04:17:22 +00:00
)
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 {
2021-09-23 17:05:48 +00:00
case levelDebug:
2021-01-26 04:17:22 +00:00
l.logger.Debug(line)
2021-09-23 17:05:48 +00:00
case levelInfo:
2021-01-26 04:17:22 +00:00
l.logger.Info(line)
2021-09-23 17:05:48 +00:00
case levelWarn:
2021-01-26 04:17:22 +00:00
l.logger.Warn(line)
2021-09-23 17:05:48 +00:00
case 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]\] `)
2021-09-23 17:05:48 +00:00
func processLogLine(s string) (filtered string, level logLevel) {
2021-01-26 04:17:22 +00:00
prefix := unboundPrefix.FindString(s)
filtered = s[len(prefix):]
switch {
case strings.HasPrefix(filtered, "notice: "):
filtered = strings.TrimPrefix(filtered, "notice: ")
2021-09-23 17:05:48 +00:00
level = levelInfo
2021-01-26 04:17:22 +00:00
case strings.HasPrefix(filtered, "info: "):
filtered = strings.TrimPrefix(filtered, "info: ")
2021-09-23 17:05:48 +00:00
level = levelInfo
2021-01-26 04:17:22 +00:00
case strings.HasPrefix(filtered, "warn: "):
filtered = strings.TrimPrefix(filtered, "warn: ")
2021-09-23 17:05:48 +00:00
level = levelWarn
2021-01-26 04:17:22 +00:00
case strings.HasPrefix(filtered, "error: "):
filtered = strings.TrimPrefix(filtered, "error: ")
2021-09-23 17:05:48 +00:00
level = levelError
2021-01-26 04:17:22 +00:00
default:
2021-09-23 17:05:48 +00:00
level = levelInfo
2021-01-26 04:17:22 +00:00
}
filtered = constants.ColorUnbound().Sprintf(filtered)
return filtered, level
}