package logger import ( "github.com/cihub/seelog" "gopkg.in/macaron.v1" "fmt" "os" "runtime" ) // 日志库 type Level int8 var logger seelog.LoggerInterface const ( DEBUG = iota INFO WARN ERROR FATAL ) func InitLogger() { config := getLogConfig() l, err := seelog.LoggerFromConfigAsString(config) if err != nil { panic(err) } logger = l } func Debug(v ...interface{}) { if macaron.Env != macaron.DEV { return } write(DEBUG, v) } func Debugf(format string, v ...interface{}) { if macaron.Env != macaron.DEV { return } writef(DEBUG, format, v...) } func Info(v ...interface{}) { write(INFO, v) } func Infof(format string, v ...interface{}) { writef(INFO, format, v...) } func Warn(v ...interface{}) { write(WARN, v) } func Warnf(format string, v ...interface{}) { writef(WARN, format, v...) } func Error(v ...interface{}) { write(ERROR, v) } func Errorf(format string, v ...interface{}) { writef(ERROR, format, v...) } func Fatal(v ...interface{}) { write(FATAL, v) } func Fatalf(format string, v ...interface{}) { writef(FATAL, format, v...) } func write(level Level, v ...interface{}) { defer logger.Flush() content := "" if macaron.Env == macaron.DEV { pc, file, line, ok := runtime.Caller(2) if ok { content = fmt.Sprintf("#%s#%s#%d行#", file, runtime.FuncForPC(pc).Name(), line) } } switch level { case DEBUG: logger.Debug(content, v) case INFO: logger.Info(content, v) case WARN: logger.Warn(content, v) case FATAL: logger.Critical(content, v) os.Exit(1) case ERROR: logger.Error(content, v) } } func writef(level Level, format string, v ...interface{}) { defer logger.Flush() content := "" if macaron.Env == macaron.DEV { pc, file, line, ok := runtime.Caller(2) if ok { content = fmt.Sprintf("#%s#%s#%d行#", file, runtime.FuncForPC(pc).Name(), line) } } format = content + format switch level { case DEBUG: logger.Debugf(format, v...) case INFO: logger.Infof(format, v...) case WARN: logger.Warnf(format, v...) case FATAL: logger.Criticalf(format, v...) os.Exit(1) case ERROR: logger.Errorf(format, v...) } } func getLogConfig() string { config := ` %s ` consoleConfig := "" if macaron.Env == macaron.DEV { consoleConfig = ` ` } config = fmt.Sprintf(config, consoleConfig) return config }