func NotMatchMapHandler(matchMap map[string]interface{}, a LogHandler) LogHandler {
	return matchMapHandler(matchMap, true, a)
}
Match !(Match all values in map to log) The inverse of MatchMapHandler
package logger
import (
	"fmt"
	"io"
)
type LevelFilterHandler struct {
	Level LogLevel
	h     LogHandler
}
func LevelHandler(lvl LogLevel, h LogHandler) LogHandler {
	return &LevelFilterHandler{lvl, h}
}
func (h LevelFilterHandler) Log(r *Record) error {
	if r.Level == h.Level {
		return h.h.Log(r)
	}
	return nil
}
func MinLevelHandler(lvl LogLevel, h LogHandler) LogHandler {
	return FilterHandler(func(r *Record) (pass bool) {
		return r.Level <= lvl
	}, h)
}
func NotLevelHandler(lvl LogLevel, h LogHandler) LogHandler {
	return FilterHandler(func(r *Record) (pass bool) {
		return r.Level != lvl
	}, h)
}
func CallerFileHandler(h LogHandler) LogHandler {
	return FuncHandler(func(r *Record) error {
		r.Context.Add("caller", fmt.Sprint(r.Call))
		return h.Log(r)
	})
}
func CallerFuncHandler(h LogHandler) LogHandler {
	return CallerFuncHandler(h)
}
func MatchHandler(key string, value interface{}, h LogHandler) LogHandler {
	return MatchFilterHandler(key, value, h)
}
func MatchFilterHandler(key string, value interface{}, h LogHandler) LogHandler {
	return FilterHandler(func(r *Record) (pass bool) {
		return r.Context[key] == value
	}, h)
}
func MatchAbHandler(key string, value interface{}, a, b LogHandler) LogHandler {
	return FuncHandler(func(r *Record) error {
		if r.Context[key] == value {
			return a.Log(r)
		} else if b != nil {
			return b.Log(r)
		}
		return nil
	})
}
func NilHandler() LogHandler {
	return FuncHandler(func(r *Record) error {
		return nil
	})
}
func MatchMapHandler(matchMap map[string]interface{}, a LogHandler) LogHandler {
	return matchMapHandler(matchMap, false, a)
}