|
- package grlogs
-
- import (
- "fmt"
- "golib.gaore.com/GaoreGo/grlogs/logs"
- "os"
- "sync"
- )
-
- var loggers = sync.Map{}
-
- var envkey = "CENTER_RUNMODE"
-
- var defaultModeMapping = map[string][]AdapterTupple{
- "es": []AdapterTupple{{LevelAll, AdapterConsole}, {LevelAll, AdapterElasticSearch}},
- "ali": []AdapterTupple{{LevelAll, AdapterConsole}, {LevelAll, AdapterAliLs}},
- "": []AdapterTupple{{LevelAll, AdapterConsole}, {LevelAll, AdapterFile}},
- }
-
- type Logger struct {
- Lable string
- *logs.BeeLogger
- }
-
- type Getter func() *Logger
-
- func (self *Logger) SetAdapter(level Level, adapter Adapter) *Logger {
- if call, ok := adatperSetMapper[adapter]; ok {
- if err := call(self, level); err != nil {
- fmt.Println(err)
- }
- }
- return self
- }
-
- func (self *Logger) DropAdapter(adapter Adapter) *Logger {
- if call, ok := adatperDropMapper[adapter]; ok {
- if err := call(self); err != nil {
- fmt.Println(err)
- }
- }
- return self
- }
-
- func newLoggerFromMap(label string, defaultmode string, channelLens ...int64) Getter {
-
- if tmp, ok := loggers.Load(label); ok {
- return tmp.(Getter)
- }
-
- var l *Logger
- var once sync.Once
- wapperGetter := Getter(func() *Logger {
- once.Do(func() {
-
- var channelLensNum int64 = 100
- if len(channelLens) > 0 && channelLens[0] > 0 {
- channelLensNum = channelLens[0]
- }
-
- l = &Logger{BeeLogger: logs.NewLogger(channelLensNum)}
- l.Lable = label
- l.BeeLogger = logs.NewLogger(channelLensNum)
- l.BeeLogger.Lable = label
- l.Env = os.Getenv(envkey)
- l.SetPrefix(fmt.Sprintf("[env:%s logger:%s]", os.Getenv(envkey), label))
- l.EnableFuncCallDepth(true)
- l.SetLogFuncCallDepth(2)
- if mode, ok := defaultModeMapping[defaultmode]; ok {
- for _, v := range mode {
- l.SetAdapter(v.Level, v.Adapter)
- }
- }
- })
-
- return l
- })
-
- tmp, loaded := loggers.LoadOrStore(label, wapperGetter)
- if loaded {
- return tmp.(Getter)
- }
-
- return wapperGetter
- }
-
- func Get(label string, channelLens ...int64) *Logger {
- getter := newLoggerFromMap(label, "", channelLens...)
- return getter()
- }
-
- func GetEs(label string, channelLens ...int64) *Logger {
- getter := newLoggerFromMap(label, "es", channelLens...)
- return getter()
- }
-
- func GetAli(label string, channelLens ...int64) *Logger {
- getter := newLoggerFromMap(label, "ali", channelLens...)
- return getter()
- }
-
- func Close(lables ...string) {
- wg := &sync.WaitGroup{}
- for _, lable := range lables {
- wg.Add(1)
- go func() {
- if v, ok := loggers.Load(lable); ok {
- if tmp, ok := v.(*Logger); ok {
- loggers.Delete(lable)
- tmp.BeeLogger.Close()
- }
- }
- wg.Done()
- }()
- }
- wg.Wait()
-
- }
-
- func CloseAll() {
- wg := &sync.WaitGroup{}
- loggers.Range(func(key, value interface{}) bool {
- wg.Add(1)
- go func() {
- if tmp, ok := value.(*Logger); ok {
- tmp.BeeLogger.Close()
- loggers.Delete(key)
- }
- wg.Done()
- }()
- return true
- })
- wg.Wait()
- }
-
- func init() {
- var level Level = LevelInfo
- if os.Getenv(envkey) == "dev" {
- level = LevelAll
- }
-
- defaultModeMapping["es"] = []AdapterTupple{{level, AdapterConsole}, {level, AdapterElasticSearch}}
- defaultModeMapping["ali"] = []AdapterTupple{{level, AdapterConsole}, {level, AdapterAliLs}}
- defaultModeMapping[""] = []AdapterTupple{{level, AdapterConsole}, {level, AdapterFile}}
- }
|