Skip to content

Commit

Permalink
[zap] Increase performance
Browse files Browse the repository at this point in the history
Create a new zap logger for each field is significant overhead. It is better to pass fields directly to zapLogger.Info method (even up to 5x times performance increase).
  • Loading branch information
elgopher committed Jan 27, 2022
1 parent b248514 commit b1f87cd
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions adapter/zapadapter/zapadapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,24 @@ func (a Adapter) Log(_ context.Context, entry logger.Entry) {
zapLogger = zapLogger.With(zap.Error(entry.Error))
}

for _, f := range entry.Fields {
zapLogger = zapLogger.With(zap.Any(f.Key, f.Value))
fields := make([]zap.Field, len(entry.Fields))

for i, f := range entry.Fields {
fields[i] = zap.Any(f.Key, f.Value)
}

zapLogger = zapLogger.WithOptions(zap.AddCallerSkip(entry.SkippedCallerFrames))

switch entry.Level {
case logger.DebugLevel:
zapLogger.Debug(entry.Message)
zapLogger.Debug(entry.Message, fields...)
case logger.InfoLevel:
zapLogger.Info(entry.Message)
zapLogger.Info(entry.Message, fields...)
case logger.WarnLevel:
zapLogger.Warn(entry.Message)
zapLogger.Warn(entry.Message, fields...)
case logger.ErrorLevel:
zapLogger.Error(entry.Message)
zapLogger.Error(entry.Message, fields...)
default:
zapLogger.Info(entry.Message)
zapLogger.Info(entry.Message, fields...)
}
}

0 comments on commit b1f87cd

Please sign in to comment.