@@ -17,12 +17,14 @@ import (
17
17
"errors"
18
18
"fmt"
19
19
"runtime"
20
+ "strings"
20
21
"testing"
21
22
"time"
22
23
23
24
"github.com/stretchr/testify/assert"
24
25
"github.com/stretchr/testify/require"
25
26
"go.uber.org/zap"
27
+ "go.uber.org/zap/buffer"
26
28
"go.uber.org/zap/zapcore"
27
29
"go.uber.org/zap/zaptest/observer"
28
30
@@ -334,3 +336,50 @@ func TestLogEnableColor(t *testing.T) {
334
336
l .Warn ("hello" )
335
337
l .Error ("hello" )
336
338
}
339
+
340
+ func TestLogNewFormatEncoder (t * testing.T ) {
341
+ const myFormatter = "myformatter"
342
+ log .RegisterFormatEncoder (myFormatter , func (ec zapcore.EncoderConfig ) zapcore.Encoder {
343
+ return & consoleEncoder {
344
+ Encoder : zapcore .NewJSONEncoder (zapcore.EncoderConfig {}),
345
+ pool : buffer .NewPool (),
346
+ cfg : ec ,
347
+ }
348
+ })
349
+ cfg := []log.OutputConfig {{Writer : "console" , Level : "trace" , Formatter : myFormatter }}
350
+ l := log .NewZapLog (cfg ).With (log.Field {Key : "trace-id" , Value : "xx" })
351
+ l .Trace ("hello" )
352
+ l .Debug ("hello" )
353
+ l .Info ("hello" )
354
+ l .Warn ("hello" )
355
+ l .Error ("hello" )
356
+ // 2023/12/14 10:54:55 {"trace-id":"xx"} DEBUG hello
357
+ // 2023/12/14 10:54:55 {"trace-id":"xx"} DEBUG hello
358
+ // 2023/12/14 10:54:55 {"trace-id":"xx"} INFO hello
359
+ // 2023/12/14 10:54:55 {"trace-id":"xx"} WARN hello
360
+ // 2023/12/14 10:54:55 {"trace-id":"xx"} ERROR hello
361
+ }
362
+
363
+ type consoleEncoder struct {
364
+ zapcore.Encoder
365
+ pool buffer.Pool
366
+ cfg zapcore.EncoderConfig
367
+ }
368
+
369
+ func (c consoleEncoder ) Clone () zapcore.Encoder {
370
+ return consoleEncoder {Encoder : c .Encoder .Clone (), pool : buffer .NewPool (), cfg : c .cfg }
371
+ }
372
+
373
+ func (c consoleEncoder ) EncodeEntry (entry zapcore.Entry , fields []zapcore.Field ) (* buffer.Buffer , error ) {
374
+ buf , err := c .Encoder .EncodeEntry (zapcore.Entry {}, nil )
375
+ if err != nil {
376
+ return nil , err
377
+ }
378
+ buffer := c .pool .Get ()
379
+ buffer .AppendString (entry .Time .Format ("2006/01/02 15:04:05" ))
380
+ field := buf .String ()
381
+ buffer .AppendString (" " + field [:len (field )- 1 ] + " " )
382
+ buffer .AppendString (strings .ToUpper (entry .Level .String ()) + " " )
383
+ buffer .AppendString (entry .Message + "\n " )
384
+ return buffer , nil
385
+ }
0 commit comments