@@ -52,6 +52,7 @@ import (
5252 "strconv"
5353
5454 "go.uber.org/zap"
55+ "go.uber.org/zap/buffer"
5556 "go.uber.org/zap/zapcore"
5657 "gopkg.in/natefinch/lumberjack.v2"
5758)
@@ -68,22 +69,22 @@ type Level = zapcore.Level
6869const (
6970 // DebugLevel logs are typically voluminous, and are usually disabled in
7071 // production.
71- DebugLevel Level = iota - 1
72+ DebugLevel = zapcore . DebugLevel
7273 // InfoLevel is the default logging priority.
73- InfoLevel
74+ InfoLevel = zapcore . InfoLevel
7475 // WarnLevel logs are more important than Info, but don't need individual
7576 // human review.
76- WarnLevel
77+ WarnLevel = zapcore . WarnLevel
7778 // ErrorLevel logs are high-priority. If an application is running smoothly,
7879 // it shouldn't generate any error-level logs.
79- ErrorLevel
80+ ErrorLevel = zapcore . ErrorLevel
8081 // DPanicLevel logs are particularly important errors. In development the
8182 // logger panics after writing the message.
82- DPanicLevel
83+ DPanicLevel = zapcore . DPanicLevel
8384 // PanicLevel logs a message, then panics.
84- PanicLevel
85+ PanicLevel = zapcore . PanicLevel
8586 // FatalLevel logs a message, then calls os.Exit(1).
86- FatalLevel
87+ FatalLevel = zapcore . FatalLevel
8788)
8889
8990func init () {
@@ -105,19 +106,62 @@ func init() {
105106 panic ("invalid GNET_LOGGING_FILE, " + err .Error ())
106107 }
107108 } else {
108- cfg := zap .NewDevelopmentConfig ()
109- cfg .Level = zap .NewAtomicLevelAt (defaultLoggingLevel )
110- cfg .EncoderConfig .EncodeTime = zapcore .RFC3339NanoTimeEncoder
111- zapLogger , _ := cfg .Build ()
109+ core := zapcore .NewCore (getDevEncoder (), zapcore .Lock (os .Stdout ), defaultLoggingLevel )
110+ zapLogger := zap .New (core ,
111+ zap .Development (),
112+ zap .AddCaller (),
113+ zap .AddStacktrace (ErrorLevel ),
114+ zap .ErrorOutput (zapcore .Lock (os .Stderr )))
112115 defaultLogger = zapLogger .Sugar ()
113116 }
114117}
115118
116- func getEncoder () zapcore.Encoder {
119+ type prefixEncoder struct {
120+ zapcore.Encoder
121+
122+ prefix string
123+ bufPool buffer.Pool
124+ }
125+
126+ func (e * prefixEncoder ) EncodeEntry (entry zapcore.Entry , fields []zapcore.Field ) (* buffer.Buffer , error ) {
127+ buf := e .bufPool .Get ()
128+
129+ buf .AppendString (e .prefix )
130+ buf .AppendString (" " )
131+
132+ logEntry , err := e .Encoder .EncodeEntry (entry , fields )
133+ if err != nil {
134+ return nil , err
135+ }
136+
137+ _ , err = buf .Write (logEntry .Bytes ())
138+ if err != nil {
139+ return nil , err
140+ }
141+
142+ return buf , nil
143+ }
144+
145+ func getDevEncoder () zapcore.Encoder {
146+ encoderConfig := zap .NewDevelopmentEncoderConfig ()
147+ encoderConfig .EncodeTime = zapcore .RFC3339NanoTimeEncoder
148+ encoderConfig .EncodeLevel = zapcore .CapitalLevelEncoder
149+ return & prefixEncoder {
150+ Encoder : zapcore .NewConsoleEncoder (encoderConfig ),
151+ prefix : "[gnet]" ,
152+ bufPool : buffer .NewPool (),
153+ }
154+ }
155+
156+ func getProdEncoder () zapcore.Encoder {
117157 encoderConfig := zap .NewProductionEncoderConfig ()
118158 encoderConfig .EncodeTime = zapcore .RFC3339NanoTimeEncoder
119159 encoderConfig .EncodeLevel = zapcore .CapitalLevelEncoder
120- return zapcore .NewConsoleEncoder (encoderConfig )
160+ return & prefixEncoder {
161+ Encoder : zapcore .NewConsoleEncoder (encoderConfig ),
162+ prefix : "[gnet]" ,
163+ bufPool : buffer .NewPool (),
164+ }
121165}
122166
123167// GetDefaultLogger returns the default logger.
@@ -144,15 +188,15 @@ func CreateLoggerAsLocalFile(localFilePath string, logLevel Level) (logger Logge
144188 MaxAge : 15 , // days
145189 }
146190
147- encoder := getEncoder ()
191+ encoder := getProdEncoder ()
148192 ws := zapcore .AddSync (lumberJackLogger )
149193 zapcore .Lock (ws )
150194
151195 levelEnabler := zap .LevelEnablerFunc (func (level Level ) bool {
152196 return level >= logLevel
153197 })
154198 core := zapcore .NewCore (encoder , ws , levelEnabler )
155- zapLogger := zap .New (core , zap .AddCaller ())
199+ zapLogger := zap .New (core , zap .AddCaller (), zap . AddStacktrace ( ErrorLevel ) )
156200 logger = zapLogger .Sugar ()
157201 flush = zapLogger .Sync
158202 return
0 commit comments