func Panic(args ...interface{}) {
	baseLogger.Panic(args...)
}
Panic logs panic message
package log
import (
	"fmt"
	"runtime"
	"strings"
	"github.com/sirupsen/logrus"
)
type Level string
type Logger interface {
	Debug(...interface{})
	Debugln(...interface{})
	Debugf(string, ...interface{})
	Info(...interface{})
	Infoln(...interface{})
	Infof(string, ...interface{})
	Warn(...interface{})
	Warnln(...interface{})
	Warnf(string, ...interface{})
	Warningf(string, ...interface{})
	Error(...interface{})
	Errorln(...interface{})
	Errorf(string, ...interface{})
	Fatal(...interface{})
	Fatalln(...interface{})
	Fatalf(string, ...interface{})
	Panic(...interface{})
	Panicln(...interface{})
	Panicf(string, ...interface{})
	With(key string, value interface{}) Logger
	WithField(key string, value interface{}) Logger
	Set(level Level) error
}
type logger struct {
	entry *logrus.Entry
}
func (l logger) Debug(args ...interface{}) {
	l.sourced().Debug(args...)
}
func (l logger) Debugln(args ...interface{}) {
	l.sourced().Debugln(args...)
}
func (l logger) Debugf(format string, args ...interface{}) {
	l.sourced().Debugf(format, args...)
}
func (l logger) Info(args ...interface{}) {
	l.sourced().Info(args...)
}
func (l logger) Infoln(args ...interface{}) {
	l.sourced().Infoln(args...)
}
func (l logger) Infof(format string, args ...interface{}) {
	l.sourced().Infof(format, args...)
}
func (l logger) Warn(args ...interface{}) {
	l.sourced().Warn(args...)
}
func (l logger) Warnln(args ...interface{}) {
	l.sourced().Warnln(args...)
}
func (l logger) Warnf(format string, args ...interface{}) {
	l.sourced().Warnf(format, args...)
}
func (l logger) Warningf(format string, args ...interface{}) {
	l.sourced().Warnf(format, args...)
}
func (l logger) Error(args ...interface{}) {
	l.sourced().Error(args...)
}
func (l logger) Errorln(args ...interface{}) {
	l.sourced().Errorln(args...)
}
func (l logger) Errorf(format string, args ...interface{}) {
	l.sourced().Errorf(format, args...)
}
func (l logger) Fatal(args ...interface{}) {
	l.sourced().Fatal(args...)
}
func (l logger) Fatalln(args ...interface{}) {
	l.sourced().Fatalln(args...)
}
func (l logger) Fatalf(format string, args ...interface{}) {
	l.sourced().Fatalf(format, args...)
}
func (l logger) Panic(args ...interface{}) {
	l.sourced().Panic(args...)
}
func (l logger) Panicln(args ...interface{}) {
	l.sourced().Panicln(args...)
}
func (l logger) Panicf(format string, args ...interface{}) {
	l.sourced().Panicf(format, args...)
}
func (l logger) With(key string, value interface{}) Logger {
	return &logger{l.entry.WithField(key, value)}
}
func (l logger) WithField(key string, value interface{}) Logger {
	return &logger{l.entry.WithField(key, value)}
}
func (l *logger) Set(level Level) error {
	leLev, err := logrus.ParseLevel(string(level))
	if err != nil {
		return err
	}
	l.entry.Logger.Level = leLev
	return nil
}
func (l logger) sourced() *logrus.Entry {
	_, file, line, ok := runtime.Caller(3)
	if !ok {
		file = "<???>"
		line = 1
	} else {
		slash := strings.LastIndex(file, "/")
		file = file[slash+1:]
	}
	return l.entry.WithField("src", fmt.Sprintf("%s:%d", file, line))
}
var jsonBaseLogger = func() Logger {
	l := logrus.New()
	l.Formatter = &logrus.JSONFormatter{}
	return &logger{
		entry: &logrus.Entry{
			Logger: l,
		},
	}
}()
var baseLogger = &logger{
	entry: &logrus.Entry{
		Logger: logrus.New(),
	},
}
func Base(json bool) Logger {
	if json {
		return jsonBaseLogger
	}
	return baseLogger
}
func Debug(args ...interface{}) {
	baseLogger.sourced().Debug(args...)
}
func Debugln(args ...interface{}) {
	baseLogger.sourced().Debugln(args...)
}
func Debugf(format string, args ...interface{}) {
	baseLogger.sourced().Debugf(format, args...)
}
func Info(args ...interface{}) {
	baseLogger.sourced().Info(args...)
}
func Infoln(args ...interface{}) {
	baseLogger.sourced().Infoln(args...)
}
func Infof(format string, args ...interface{}) {
	baseLogger.sourced().Infof(format, args...)
}
func Warn(args ...interface{}) {
	baseLogger.sourced().Warn(args...)
}
func Warnln(args ...interface{}) {
	baseLogger.sourced().Warnln(args...)
}
func Warnf(format string, args ...interface{}) {
	baseLogger.sourced().Warnf(format, args...)
}
func Error(args ...interface{}) {
	baseLogger.sourced().Error(args...)
}
func Errorln(args ...interface{}) {
	baseLogger.sourced().Errorln(args...)
}
func Errorf(format string, args ...interface{}) {
	baseLogger.sourced().Errorf(format, args...)
}
func Fatal(args ...interface{}) {
	baseLogger.sourced().Fatal(args...)
}
func Fatalln(args ...interface{}) {
	baseLogger.sourced().Fatalln(args...)
}
func Fatalf(format string, args ...interface{}) {
	baseLogger.sourced().Fatalf(format, args...)
}
func With(key string, value interface{}) Logger {
	return baseLogger.With(key, value)
}
func WithField(key string, value interface{}) Logger {
	return baseLogger.WithField(key, value)
}
func Set(level Level) error {
	return baseLogger.Set(level)
}