Unit тесты для zap логгера в Golang

Zap — популярная в Go лог система, написанная убером.

Задача, которая однажды встала передо мной — как проверить что все нужные сообщения логгера  были вызваны в коде?

Для этого я нашел решение как сам zap тестирует свою логику — при помощи zap observer:

obs, logs := observer.New(zap.InfoLevel)
logger := zap.New(obs)

Теперь нам нужно запустить наш код и потом проверить полученные сообщения логгера в observer:

func SomeFunc(logger *zap.Logger){
 logger.Info("Some log message in function",zap.String("path","echo"))
}

u := SomeFunc(logger)

want := []observer.LoggedEntry{
		{
			Entry:   zapcore.Entry{Level: zap.InfoLevel, Message: "Some log message in function"},
			Context: []zapcore.Field{zap.String("path", "echo")},
		},
}
require.Equal(t, 1, logs.Len()) // so we called zap.Info only once
require.Equal(t, want, logs.AllUntimed(), "Unexpected contents from AllUntimed.") // check that we got all log entries that we expected

Таким образом мы можем проверять нашу бизнес логику при помощи zap логов если это требуется.

 

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *