diff --git a/zapcore/encoder.go b/zapcore/encoder.go index f0509522b..10ad652e6 100644 --- a/zapcore/encoder.go +++ b/zapcore/encoder.go @@ -308,7 +308,8 @@ type ArrayEncoder interface { type PrimitiveArrayEncoder interface { // Built-in types. AppendBool(bool) - AppendByteString([]byte) // for UTF-8 encoded bytes + AppendBinary(value []byte) // for arbitrary bytes + AppendByteString([]byte) // for UTF-8 encoded bytes AppendComplex128(complex128) AppendComplex64(complex64) AppendFloat64(float64) diff --git a/zapcore/json_encoder.go b/zapcore/json_encoder.go index 2dc67d81e..f92892b7a 100644 --- a/zapcore/json_encoder.go +++ b/zapcore/json_encoder.go @@ -196,6 +196,10 @@ func (enc *jsonEncoder) AppendBool(val bool) { enc.buf.AppendBool(val) } +func (enc *jsonEncoder) AppendBinary(val []byte) { + enc.AppendString(base64.StdEncoding.EncodeToString(val)) +} + func (enc *jsonEncoder) AppendByteString(val []byte) { enc.addElementSeparator() enc.buf.AppendByte('"') diff --git a/zapcore/json_encoder_impl_test.go b/zapcore/json_encoder_impl_test.go index 563d5f6b6..f4eaa6579 100644 --- a/zapcore/json_encoder_impl_test.go +++ b/zapcore/json_encoder_impl_test.go @@ -236,6 +236,8 @@ func TestJSONEncoderArrays(t *testing.T) { f func(ArrayEncoder) }{ {"bool", `[true,true]`, func(e ArrayEncoder) { e.AppendBool(true) }}, + {"binary", `["aw==","aw=="]`, func(e ArrayEncoder) { e.AppendBinary([]byte("k")) }}, + {"binary", `["a1w=","a1w="]`, func(e ArrayEncoder) { e.AppendBinary([]byte(`k\`)) }}, {"byteString", `["k","k"]`, func(e ArrayEncoder) { e.AppendByteString([]byte("k")) }}, {"byteString", `["k\\","k\\"]`, func(e ArrayEncoder) { e.AppendByteString([]byte(`k\`)) }}, {"complex128", `["1+2i","1+2i"]`, func(e ArrayEncoder) { e.AppendComplex128(1 + 2i) }}, diff --git a/zapcore/memory_encoder.go b/zapcore/memory_encoder.go index dfead0829..96b95d8d9 100644 --- a/zapcore/memory_encoder.go +++ b/zapcore/memory_encoder.go @@ -158,6 +158,7 @@ func (s *sliceArrayEncoder) AppendReflected(v interface{}) error { } func (s *sliceArrayEncoder) AppendBool(v bool) { s.elems = append(s.elems, v) } +func (s *sliceArrayEncoder) AppendBinary(v []byte) { s.elems = append(s.elems, v) } func (s *sliceArrayEncoder) AppendByteString(v []byte) { s.elems = append(s.elems, string(v)) } func (s *sliceArrayEncoder) AppendComplex128(v complex128) { s.elems = append(s.elems, v) } func (s *sliceArrayEncoder) AppendComplex64(v complex64) { s.elems = append(s.elems, v) }