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