grlogs/log.go

106 líneas
2.0 KiB
Go

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
}
}