@@ -47,6 +47,9 @@ type EscapeFormatter struct {
47
47
// If nil, the standard encoding/json.Encoder will be used instead.
48
48
marshaler func (interface {}) ([]byte , error )
49
49
50
+ defaultMarshaler * json.Encoder
51
+ defaultMarshalerBuffer * bytes.Buffer
52
+
50
53
// prefix is indent prefix used by the JSON encoder when Marshaler is nil.
51
54
prefix string
52
55
@@ -79,11 +82,15 @@ type EscapeFormatter struct {
79
82
// values.
80
83
func NewEscapeFormatter (opts ... EscapeFormatterOption ) * EscapeFormatter {
81
84
f := & EscapeFormatter {
82
- mask : "%d" ,
83
- timeFormat : time .RFC3339Nano ,
84
- indent : " " ,
85
- valuesPool : newValuesPool (),
85
+ mask : "%d" ,
86
+ timeFormat : time .RFC3339Nano ,
87
+ indent : " " ,
88
+ valuesPool : newValuesPool (),
89
+ defaultMarshalerBuffer : new (bytes.Buffer ),
86
90
}
91
+ f .defaultMarshaler = json .NewEncoder (f .defaultMarshalerBuffer )
92
+ f .defaultMarshaler .SetIndent (f .prefix , f .indent )
93
+ f .defaultMarshaler .SetEscapeHTML (f .escapeHTML )
87
94
f .Configure (opts ... )
88
95
return f
89
96
}
@@ -288,17 +295,14 @@ func (f *EscapeFormatter) Format(vals []interface{}) ([]*Value, error) {
288
295
res [i ] = f .valuesPool .newRaw (buf )
289
296
} else {
290
297
// json encode
291
- buf := new (bytes.Buffer )
292
- enc := json .NewEncoder (buf )
293
- enc .SetIndent (f .prefix , f .indent )
294
- enc .SetEscapeHTML (f .escapeHTML )
295
- if err := enc .Encode (v ); err != nil {
298
+ f .defaultMarshalerBuffer .Reset ()
299
+ if err := f .defaultMarshaler .Encode (v ); err != nil {
296
300
return nil , err
297
301
}
298
302
if f .escapeJSON {
299
- res [i ] = f .valuesPool .newRaw (bytes .TrimSpace (buf .Bytes ()))
303
+ res [i ] = f .valuesPool .newRaw (bytes .TrimSpace (f . defaultMarshalerBuffer .Bytes ()))
300
304
} else {
301
- res [i ] = f .valuesPool .formatBytes (bytes .TrimSpace (buf .Bytes ()), f .invalid , f .invalidWidth , false )
305
+ res [i ] = f .valuesPool .formatBytes (bytes .TrimSpace (f . defaultMarshalerBuffer .Bytes ()), f .invalid , f .invalidWidth , false )
302
306
res [i ].Raw = true
303
307
}
304
308
}
0 commit comments