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