func (l Logger) Log(keyvals ...interface{}) error {
	if l.isExcluded() {
		return nil
	}
	logr := klog.WithPrefix(l.log, "name", l.name)
	if l.Caller {
		logr = klog.WithPrefix(l.log, "name", l.name, "caller", klog.Caller(l.CallDepth))
	}
	return logr.Log(keyvals...)
}
Log satisfies the logger interface.
package log
import (
	"os"
	"github.com/davecgh/go-spew/spew"
	klog "github.com/go-kit/kit/log"
)
var spd = spew.ConfigState{ContinueOnMethod: true, Indent: "\t", MaxDepth: 0}  
type Logger struct {
	name      string       
	Caller    bool         
	CallDepth int          
	log       klog.Logger  
	excludes  []string     
}
func NewLogger(conf Config) Logger {
	return Logger{
		name:      conf.Name,
		Caller:    conf.Caller,
		CallDepth: conf.CallDepth,
		log:       conf.Logger,
		excludes:  conf.Excludes,
	}
}
func (l Logger) isExcluded() bool {
	if len(l.excludes) > 0 {
		for _, v := range l.excludes {
			if v == l.name {
				return true
			}
		}
	}
	return false
}
func (l Logger) StdLogger() klog.Logger { return l.log }
func (l Logger) SetLogger(logr klog.Logger) { l.log = logr }
func (l Logger) Msg(message string) error {
	if l.isExcluded() {
		return nil
	}
	logr := klog.WithPrefix(l.log, "name", l.name)
	if l.Caller {
		logr = klog.WithPrefix(l.log, "name", l.name, "caller", klog.Caller(l.CallDepth))
	}
	return logr.Log("msg", message)
}
func (l Logger) Msgr(message string, keyvals ...interface{}) error {
	if l.isExcluded() {
		return nil
	}
	logr := klog.WithPrefix(l.log, "name", l.name, "msg", message)
	if l.Caller {
		logr = klog.WithPrefix(l.log, "name", l.name, "caller", klog.Caller(l.CallDepth), "msg", message)
	}
	return logr.Log(keyvals...)
}
func (l Logger) Err(err error) error {
	if l.isExcluded() {
		return nil
	}
	logr := klog.WithPrefix(l.log, "name", l.name)
	if l.Caller {
		logr = klog.WithPrefix(l.log, "name", l.name, "caller", klog.Caller(l.CallDepth))
	}
	return logr.Log("error", err.Error())
}