package utils import ( "errors" "fmt" "runtime" "github.com/astaxie/beego/config" "github.com/astaxie/beego/logs" ) var instances = make(map[string]*logs.BeeLogger) // NewLog 构造日志对象 func NewLog(tp ...string) *logs.BeeLogger { logType := "common" if len(tp) > 0 { if tp[0] != "" { logType = tp[0] } } if v, ok := instances[logType]; ok { return v } log := logs.NewLogger() instances[logType] = log // 读取配置文件 conf, err := config.NewConfig("ini", GetAppRoot()+"/conf/log.conf") if err != nil { log.SetLogger(logs.AdapterConsole) return log } // 读文件存储位置 filename := conf.String(logType + "::filename") // 输出级别 level := conf.String(logType + "::level") if level == "" { level = "error" } if filename == "" { filename = "./" + logType + ".log" } log.Async() log.SetLogger(logs.AdapterFile, `{"filename":"`+filename+`"}`) return log } // LogError 错误日志 func LogError(v ...interface{}) error { log := instances["common"] preMsg := "" _, file, line, ok := runtime.Caller(1) if ok { preMsg = fmt.Sprintf("file: %s line=%d : ", file, line) } log.Error(preMsg, v...) if len(v) > 0 { firstV := v[0] switch err := firstV.(type) { case string: return errors.New(err) case error: return err default: msg := "Unknown error type" return errors.New(msg) } } return nil } // LogInfo Info 日志 func LogInfo(v ...interface{}) { log := instances["common"] preMsg := "" _, file, line, ok := runtime.Caller(1) if ok { preMsg = fmt.Sprintf("file: %s line=%d : ", file, line) } log.Error(preMsg, v...) } // GetDefaultLogger 获取默认 logger func GetDefaultLogger() *logs.BeeLogger { log := instances["common"] log.SetLogFuncCallDepth(4) return log } func LogInit() { NewLog() }