package server import ( "github.com/rs/zerolog" tmlog "github.com/tendermint/tendermint/libs/log" ) var _ tmlog.Logger = (*ZeroLogWrapper)(nil) // ZeroLogWrapper provides a wrapper around a zerolog.Logger instance. It implements // Tendermint's Logger interface. type ZeroLogWrapper struct { zerolog.Logger } // Info implements Tendermint's Logger interface and logs with level INFO. A set // of key/value tuples may be provided to add context to the log. The number of // tuples must be even and the key of the tuple must be a string. func (z ZeroLogWrapper) Info(msg string, keyVals ...interface{}) { z.Logger.Info().Fields(getLogFields(keyVals...)).Msg(msg) } // Error implements Tendermint's Logger interface and logs with level ERR. A set // of key/value tuples may be provided to add context to the log. The number of // tuples must be even and the key of the tuple must be a string. func (z ZeroLogWrapper) Error(msg string, keyVals ...interface{}) { z.Logger.Error().Fields(getLogFields(keyVals...)).Msg(msg) } // Debug implements Tendermint's Logger interface and logs with level DEBUG. A set // of key/value tuples may be provided to add context to the log. The number of // tuples must be even and the key of the tuple must be a string. func (z ZeroLogWrapper) Debug(msg string, keyVals ...interface{}) { z.Logger.Debug().Fields(getLogFields(keyVals...)).Msg(msg) } // With returns a new wrapped logger with additional context provided by a set // of key/value tuples. The number of tuples must be even and the key of the // tuple must be a string. func (z ZeroLogWrapper) With(keyVals ...interface{}) tmlog.Logger { return ZeroLogWrapper{z.Logger.With().Fields(getLogFields(keyVals...)).Logger()} } func getLogFields(keyVals ...interface{}) map[string]interface{} { if len(keyVals)%2 != 0 { return nil } fields := make(map[string]interface{}) for i := 0; i < len(keyVals); i += 2 { fields[keyVals[i].(string)] = keyVals[i+1] } return fields }