package grlogs import ( "bytes" "encoding/json" "fmt" "github.com/astaxie/beego" "github.com/astaxie/beego/logs" ) const ( _ = iota LEVEL_NONE = iota LEVEL_CRITICAL = iota LEVEL_ERROR = iota LEVEL_WARNING = iota LEVEL_WARN = iota LEVEL_INFO = iota LEVEL_DEBUG = iota LEVEL_ALL = iota ) type ConsoleLogConfig struct { Level int `json:"level"` } type FileLogConfig struct { Filename string `json:"filename"` Level int `json:"level"` Maxlines int `json:"maxlines"` Daily bool `json:"daily"` Maxdays int `json:"maxdays"` Color bool `json:"color"` Rotate bool `json:"rotate"` } type ConnLogConfig struct { ReconnectOnMsg bool `json:"reconnect_on_msg"` Reconnect bool `json:"reconnect"` Net string `json:"net"` Addr string `json:"addr"` Level int `json:"level"` } var loggers = make(map[string]*Logger) type Logger struct { *logs.BeeLogger } func (l *Logger) Write(p []byte) (n int, err error) { l.Debug(bytes.NewBuffer(p).String()) return } func (l *Logger) SetFormat() { } func (l *Logger) Stop() { l.BeeLogger.Close() } func GetLogger(name string) *Logger { if l, ok := loggers[name]; ok { return l } else { var level int = LEVEL_WARN if beego.BConfig.RunMode == "dev" { level = LEVEL_ALL } conf1 := FileLogConfig{ Filename: GetCwd(fmt.Sprintf("runtime/logs/%s.log", name)), Level: LEVEL_ALL, Maxlines: 0, Daily: true, Maxdays: 7, Color: true, Rotate: true, } conf2 := ConsoleLogConfig{ Level: level, } confString, _ := json.Marshal(&conf1) confString2, _ := json.Marshal(&conf2) loggers[name] = &Logger{} loggers[name].BeeLogger = logs.NewLogger() loggers[name].SetLogger(logs.AdapterFile, bytes.NewBuffer(confString).String()) loggers[name].SetLogger(logs.AdapterConsole, bytes.NewBuffer(confString2).String()) loggers[name].BeeLogger.SetPrefix("_" + name) loggers[name].BeeLogger.EnableFuncCallDepth(true) loggers[name].BeeLogger.SetLogFuncCallDepth(2) return loggers[name] } }