diff --git a/types/logger.go b/types/logger.go new file mode 100644 index 0000000000..f736b01209 --- /dev/null +++ b/types/logger.go @@ -0,0 +1,49 @@ +package types + +import ( + "github.com/tendermint/tmlibs/log" +) + +// MemLogger logs to memory +type MemLogger interface { + log.Logger + Logs() []LogEntry +} + +// LogEntry is an entry in a log +type LogEntry struct { + Level string + Message string + Keyvals []interface{} +} + +type memLogger struct { + entries *[]LogEntry +} + +func (l memLogger) Debug(msg string, keyvals ...interface{}) { + *l.entries = append(*l.entries, LogEntry{"debug", msg, keyvals}) +} + +func (l memLogger) Info(msg string, keyvals ...interface{}) { + *l.entries = append(*l.entries, LogEntry{"info", msg, keyvals}) +} + +func (l memLogger) Error(msg string, keyvals ...interface{}) { + *l.entries = append(*l.entries, LogEntry{"error", msg, keyvals}) +} + +func (l memLogger) With(keyvals ...interface{}) log.Logger { + panic("not implemented") +} + +func (l memLogger) Logs() []LogEntry { + return *l.entries +} + +func NewMemLogger() MemLogger { + entries := make([]LogEntry, 0) + return &memLogger{ + entries: &entries, + } +} diff --git a/types/logger_test.go b/types/logger_test.go new file mode 100644 index 0000000000..e8cb51e113 --- /dev/null +++ b/types/logger_test.go @@ -0,0 +1,17 @@ +package types + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestMemLogger(t *testing.T) { + logger := NewMemLogger() + logger.Info("msg") + require.Equal(t, logger.Logs(), []LogEntry{LogEntry{"info", "msg", nil}}) + logger.Debug("msg2") + require.Equal(t, logger.Logs(), []LogEntry{LogEntry{"info", "msg", nil}, LogEntry{"debug", "msg2", nil}}) + logger.Error("msg3", 2) + require.Equal(t, logger.Logs(), []LogEntry{LogEntry{"info", "msg", nil}, LogEntry{"debug", "msg2", nil}, LogEntry{"error", "msg3", []interface{}{2}}}) +}