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 логов если это требуется.