package grlogs import ( "bytes" "encoding/json" "fmt" "golib.gaore.com/GaoreGo/grlogs/logs" "os" "path" "sync" ) 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 = sync.Map{} 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.Load(name); ok { return l.(*Logger) } else { var level int = LEVEL_WARN if s := os.Getenv("CENTER_RUNMODE"); s == "dev" { level = LEVEL_ALL } wd, _ := os.Getwd() conf1 := FileLogConfig{ Filename: path.Join(wd, 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) l := new(Logger) l.BeeLogger = logs.NewLogger(1000) l.SetLogger(logs.AdapterFile, bytes.NewBuffer(confString).String()) l.SetLogger(logs.AdapterConsole, bytes.NewBuffer(confString2).String()) l.BeeLogger.SetPrefix("_" + name) l.BeeLogger.EnableFuncCallDepth(true) l.BeeLogger.SetLogFuncCallDepth(2) loggers.Store(name, l) return l } }