From 464dd858b6d9d7fcc3ec7c7a97abf89f964c54ca Mon Sep 17 00:00:00 2001 From: Paul Wells Date: Sun, 1 Oct 2023 19:38:23 -0700 Subject: [PATCH] truncate bytes in proto logs (#488) * truncate bytes in proto logs * fix --- logger/proto.go | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/logger/proto.go b/logger/proto.go index 3154f5c46..a95fa868d 100644 --- a/logger/proto.go +++ b/logger/proto.go @@ -16,6 +16,7 @@ package logger import ( "encoding/base64" + "fmt" "strconv" "go.uber.org/zap/zapcore" @@ -106,7 +107,7 @@ func (p protoListMarshaller) MarshalLogArray(e zapcore.ArrayEncoder) error { case protoreflect.StringKind: e.AppendString(v.String()) case protoreflect.BytesKind: - e.AppendString(base64.RawStdEncoding.EncodeToString(v.Bytes())) + e.AppendString(marshalProtoBytes(v.Bytes())) case protoreflect.MessageKind: e.AppendObject(protoMarshaller{v.Message()}) } @@ -142,7 +143,7 @@ func marshalProtoField(k string, f protoreflect.FieldDescriptor, v protoreflect. } case protoreflect.BytesKind: if b := v.Bytes(); len(b) != 0 { - e.AddString(k, base64.RawStdEncoding.EncodeToString(b)) + e.AddString(k, marshalProtoBytes(b)) } case protoreflect.MessageKind: if m := v.Message(); m.IsValid() { @@ -150,3 +151,23 @@ func marshalProtoField(k string, f protoreflect.FieldDescriptor, v protoreflect. } } } + +func marshalProtoBytes(b []byte) string { + n := len(b) + if n > 64 { + b = b[:64] + } + s := base64.RawStdEncoding.EncodeToString(b) + switch { + case n <= 64: + return s + case n < 1<<10: + return fmt.Sprintf("%s... (%dbytes)", s, n) + case n < 1<<20: + return fmt.Sprintf("%s... (%.2fkB)", s, float64(n)/float64(1<<10)) + case n < 1<<30: + return fmt.Sprintf("%s... (%.2fMB)", s, float64(n)/float64(1<<20)) + default: + return fmt.Sprintf("%s... (%.2fGB)", s, float64(n)/float64(1<<30)) + } +}