func Flush() {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Flush()
}
func Detail(msg ...interface{}) {
if DefaultLogger == nil {
return
}
DefaultLogger.Detail(msg...)
}
func Detailf(format string, msg ...interface{}) {
if DefaultLogger == nil {
return
}
DefaultLogger.Detailf(format, msg...)
}
package logger
import (
	"encoding/json"
	"flag"
	"fmt"
	"os"
	"runtime"
	"github.com/astaxie/beego/logs"
	_ "github.com/golang/glog"
)
const (
	LevelEmergency     = iota  
	LevelAlert                 
	LevelCritical              
	LevelError                 
	LevelWarning               
	LevelInformational         
	LevelDebug                 
)
type Logger struct {
	l *logs.BeeLogger
}
var (
	DefaultLogger *Logger
	DefaultMsgCount int64 = 10000
	DefalutLogLevel       = logs.LevelDebug
)
func newLog(logger, jsonconfig string, bufsize int64) (l *Logger, err error) {
	l = &Logger{l: logs.NewLogger(bufsize)}
	if logger == "" {
		return
	}
	err = l.l.SetLogger(logger, jsonconfig)
	if err != nil {
		return nil, err
	}
	var config struct {
		Level int `json:"level"`
	}
	err = json.Unmarshal([]byte(jsonconfig), &config)
	if err != nil {
		return nil, err
	}
	l.l.SetLevel(config.Level)
	return l, err
}
func Init(logger, jsonconfig string, async bool) (err error) {
	DefaultLogger, err = newLog(logger, jsonconfig, DefaultMsgCount)
	if err != nil {
		return
	}
	if async {
		DefaultLogger.l.Async()
	}
	DefaultLogger.l.SetLogFuncCallDepth(4)
	DefaultLogger.l.EnableFuncCallDepth(true)
	if logger == "glog" {
		flag.Parse()  
	}
	return
}
func SetLevel(level int) {
	DefaultLogger.SetLevel(level)
}
func Emergency(msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Emergency(msg...)
}
func Emergencyf(format string, msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Emergencyf(format, msg...)
}
func Alert(msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Alert(msg...)
}
func Alertf(format string, msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Alertf(format, msg...)
}
func Critical(msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Critical(msg...)
}
func Criticalf(format string, msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Criticalf(format, msg...)
}
func Error(msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Error(msg...)
}
func Errorf(format string, msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Errorf(format, msg...)
}
func Warn(msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Warn(msg...)
}
func Warnf(format string, msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Warnf(format, msg...)
}
func Info(msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Info(msg...)
}
func Infof(format string, msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Infof(format, msg...)
}
func Debug(msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Debug(msg...)
}
func Debugf(format string, msg ...interface{}) {
	if DefaultLogger == nil {
		return
	}
	DefaultLogger.Debugf(format, msg...)
}