diff --git a/cmd/gluetun/main.go b/cmd/gluetun/main.go index 2c400044..37102067 100644 --- a/cmd/gluetun/main.go +++ b/cmd/gluetun/main.go @@ -6,6 +6,7 @@ import ( "net" "os" "os/signal" + "regexp" "strings" "syscall" "time" @@ -320,6 +321,7 @@ func collectStreamLines(ctx context.Context, streamMerger command.StreamMerger, // Blocking line merging paramsReader for all programs: openvpn, tinyproxy, unbound and shadowsocks logger.Info("Launching standard output merger") streamMerger.CollectLines(ctx, func(line string) { + line = trimEventualProgramPrefix(line) logger.Info(line) if strings.Contains(line, "Initialization Sequence Completed") { signalConnected() @@ -329,6 +331,27 @@ func collectStreamLines(ctx context.Context, streamMerger command.StreamMerger, }) } +func trimEventualProgramPrefix(s string) string { + switch { + case strings.HasPrefix(s, "unbound: "): + prefixRegex := regexp.MustCompile(`unbound: \[[0-9]{10}\] unbound\[[0-9]+:0\] `) + prefix := prefixRegex.FindString(s) + return fmt.Sprintf("unbound: %s", s[len(prefix):]) + case strings.HasPrefix(s, "shadowsocks: "): + prefixRegex := regexp.MustCompile(`shadowsocks:[ ]+2[0-9]{3}\-[0-1][0-9]\-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9] `) + prefix := prefixRegex.FindString(s) + return fmt.Sprintf("shadowsocks: %s", s[len(prefix):]) + case strings.HasPrefix(s, "tinyproxy: "): + logLevelRegex := regexp.MustCompile(`INFO|CONNECT|NOTICE|WARNING|ERROR|CRITICAL`) + logLevel := logLevelRegex.FindString(s) + prefixRegex := regexp.MustCompile(`tinyproxy: (INFO|CONNECT|NOTICE|WARNING|ERROR|CRITICAL)[ ]+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9] \[[0-9]+\]: `) + prefix := prefixRegex.FindString(s) + return fmt.Sprintf("tinyproxy: %s %s", logLevel, s[len(prefix):]) + default: + return s + } +} + func openvpnRunLoop(ctx context.Context, ovpnConf openvpn.Configurator, streamMerger command.StreamMerger, logger logging.Logger, httpServer server.Server, waiter command.Waiter, fatalOnError func(err error)) { logger = logger.WithPrefix("openvpn: ") diff --git a/internal/mullvad/conf.go b/internal/mullvad/conf.go index 7230db1f..fe1913b4 100644 --- a/internal/mullvad/conf.go +++ b/internal/mullvad/conf.go @@ -65,6 +65,7 @@ func (c *configurator) BuildConf(connections []models.OpenVPNConnection, verbosi "pull-filter ignore \"auth-token\"", // prevent auth failed loops "auth-retry nointeract", "remote-random", + "suppress-timestamps", // Modified variables fmt.Sprintf("verb %d", verbosity), diff --git a/internal/pia/conf.go b/internal/pia/conf.go index 81fc6703..554b390b 100644 --- a/internal/pia/conf.go +++ b/internal/pia/conf.go @@ -99,6 +99,7 @@ func (c *configurator) BuildConf(connections []models.OpenVPNConnection, encrypt "pull-filter ignore \"auth-token\"", // prevent auth failed loops "auth-retry nointeract", "remote-random", + "suppress-timestamps", // Modified variables fmt.Sprintf("verb %d", verbosity), diff --git a/internal/windscribe/conf.go b/internal/windscribe/conf.go index a53db23a..c51b85c1 100644 --- a/internal/windscribe/conf.go +++ b/internal/windscribe/conf.go @@ -76,6 +76,7 @@ func (c *configurator) BuildConf(connections []models.OpenVPNConnection, verbosi "pull-filter ignore \"auth-token\"", // prevent auth failed loops "auth-retry nointeract", "remote-random", + "suppress-timestamps", // Modified variables fmt.Sprintf("verb %d", verbosity),