From b8c30314b5d0be4d56daf11eedbdc5811e1ac45f Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 25 Jan 2022 12:59:18 +0100 Subject: [PATCH] node: avoid clobbering terminal with binary data commit-id:222d1f31 --- node/cmd/guardiand/logging.go | 28 ++++++++++++++++++++++++++++ node/cmd/guardiand/node.go | 11 +++++------ node/pkg/p2p/p2p.go | 2 +- 3 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 node/cmd/guardiand/logging.go diff --git a/node/cmd/guardiand/logging.go b/node/cmd/guardiand/logging.go new file mode 100644 index 000000000..53f360964 --- /dev/null +++ b/node/cmd/guardiand/logging.go @@ -0,0 +1,28 @@ +package guardiand + +import ( + "go.uber.org/zap/buffer" + "go.uber.org/zap/zapcore" + "unicode" +) + +type consoleEncoder struct { + zapcore.Encoder +} + +func (e consoleEncoder) EncodeEntry(entry zapcore.Entry, fields []zapcore.Field) (*buffer.Buffer, error) { + buf, err := e.Encoder.EncodeEntry(entry, fields) + if err != nil { + buf.Free() + return nil, err + } + + b := buf.Bytes() + for i := range b { + if unicode.IsControl(rune(b[i])) && !unicode.IsSpace(rune(b[i])) { + b[i] = '\x1A' // Substitute character + } + } + + return buf, nil +} diff --git a/node/cmd/guardiand/node.go b/node/cmd/guardiand/node.go index 259bbd417..fba788526 100644 --- a/node/cmd/guardiand/node.go +++ b/node/cmd/guardiand/node.go @@ -245,12 +245,11 @@ func runNode(cmd *cobra.Command, args []string) { os.Exit(1) } - cfg := zap.NewDevelopmentConfig() - cfg.Level = zap.NewAtomicLevelAt(zapcore.Level(lvl)) - logger, err := cfg.Build() - if err != nil { - panic(err) - } + logger := zap.New(zapcore.NewCore( + consoleEncoder{zapcore.NewConsoleEncoder( + zap.NewDevelopmentEncoderConfig())}, + zapcore.AddSync(zapcore.Lock(os.Stderr)), + zap.NewAtomicLevelAt(zapcore.Level(lvl)))) if *unsafeDevMode { // Use the hostname as nodeName. For production, we don't want to do this to diff --git a/node/pkg/p2p/p2p.go b/node/pkg/p2p/p2p.go index 073f29ebd..f8c7ec6c9 100644 --- a/node/pkg/p2p/p2p.go +++ b/node/pkg/p2p/p2p.go @@ -293,7 +293,7 @@ func Run(obsvC chan *gossipv1.SignedObservation, sendC chan []byte, signedInC ch err = proto.Unmarshal(envelope.Data, &msg) if err != nil { logger.Info("received invalid message", - zap.String("data", string(envelope.Data)), + zap.Binary("data", envelope.Data), zap.String("from", envelope.GetFrom().String())) p2pMessagesReceived.WithLabelValues("invalid").Inc() continue