|
|
@@ -11,12 +11,19 @@ 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 |
|
|
|
lock sync.RWMutex |
|
|
|
} |
|
|
|
|
|
|
|
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 { |
|
|
@@ -35,72 +42,61 @@ func (self *Logger) DropAdapter(adapter Adapter) *Logger { |
|
|
|
return self |
|
|
|
} |
|
|
|
|
|
|
|
func newLogger(label string, channelLens ...int64) (l *Logger, loaded bool) { |
|
|
|
var channellens int64 |
|
|
|
var tmp interface{} |
|
|
|
func newLoggerFromMap(label string, defaultmode string, channelLens ...int64) Getter { |
|
|
|
|
|
|
|
if len(channelLens) > 0 { |
|
|
|
channellens = channelLens[0] |
|
|
|
if tmp, ok := loggers.Load(label); ok { |
|
|
|
return tmp.(Getter) |
|
|
|
} |
|
|
|
|
|
|
|
tmp, loaded = loggers.LoadOrStore(label, func() *Logger { |
|
|
|
l := &Logger{BeeLogger: logs.NewLogger(channellens)} |
|
|
|
l.Lable = label |
|
|
|
l.BeeLogger = logs.NewLogger(channellens) |
|
|
|
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) |
|
|
|
return l |
|
|
|
}()) |
|
|
|
var l *Logger |
|
|
|
var once sync.Once |
|
|
|
wapperGetter := Getter(func() *Logger { |
|
|
|
once.Do(func() { |
|
|
|
|
|
|
|
l = tmp.(*Logger) |
|
|
|
return |
|
|
|
} |
|
|
|
var channelLensNum int64 = 100 |
|
|
|
if len(channelLens) > 0 && channelLens[0] > 0 { |
|
|
|
channelLensNum = channelLens[0] |
|
|
|
} |
|
|
|
|
|
|
|
func New(label string, channelLens ...int64) (l *Logger, loaded bool) { |
|
|
|
return newLogger(label, channelLens...) |
|
|
|
} |
|
|
|
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) |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
func Get(label string, channelLens ...int64) (l *Logger) { |
|
|
|
var filelevel Level = LevelInfo |
|
|
|
var loaded bool |
|
|
|
if os.Getenv(envkey) == "dev" { |
|
|
|
filelevel = LevelAll |
|
|
|
} |
|
|
|
return l |
|
|
|
}) |
|
|
|
|
|
|
|
if l, loaded = New(label, channelLens...); !loaded { |
|
|
|
l.SetAdapter(filelevel, AdapterFile).SetAdapter(LevelAll, AdapterConsole) |
|
|
|
tmp, loaded := loggers.LoadOrStore(label, wapperGetter) |
|
|
|
if loaded { |
|
|
|
return tmp.(Getter) |
|
|
|
} |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
func GetEs(label string, channelLens ...int64) (l *Logger) { |
|
|
|
var filelevel Level = LevelInfo |
|
|
|
var loaded bool |
|
|
|
if os.Getenv(envkey) == "dev" { |
|
|
|
filelevel = LevelAll |
|
|
|
} |
|
|
|
return wapperGetter |
|
|
|
} |
|
|
|
|
|
|
|
if l, loaded = New(label, channelLens...); !loaded { |
|
|
|
l.SetAdapter(filelevel, AdapterFile).SetAdapter(LevelAll, AdapterConsole).SetAdapter(filelevel, AdapterElasticSearch) |
|
|
|
l.lock.Unlock() |
|
|
|
} |
|
|
|
return |
|
|
|
func Get(label string, channelLens ...int64) *Logger { |
|
|
|
getter := newLoggerFromMap(label, "", channelLens...) |
|
|
|
return getter() |
|
|
|
} |
|
|
|
|
|
|
|
func GetAli(label string, channelLens ...int64) (l *Logger) { |
|
|
|
var filelevel Level = LevelInfo |
|
|
|
var loaded bool |
|
|
|
if os.Getenv(envkey) == "dev" { |
|
|
|
filelevel = LevelAll |
|
|
|
} |
|
|
|
func GetEs(label string, channelLens ...int64) *Logger { |
|
|
|
getter := newLoggerFromMap(label, "es", channelLens...) |
|
|
|
return getter() |
|
|
|
} |
|
|
|
|
|
|
|
if l, loaded = New(label, channelLens...); !loaded { |
|
|
|
l.SetAdapter(LevelAll, AdapterConsole).SetAdapter(filelevel, AdapterFile).SetAdapter(filelevel, AdapterAliLs) |
|
|
|
} |
|
|
|
return |
|
|
|
func GetAli(label string, channelLens ...int64) *Logger { |
|
|
|
getter := newLoggerFromMap(label, "ali", channelLens...) |
|
|
|
return getter() |
|
|
|
} |
|
|
|
|
|
|
|
func Close(lables ...string) { |
|
|
@@ -136,3 +132,14 @@ func CloseAll() { |
|
|
|
}) |
|
|
|
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}} |
|
|
|
} |