|
@@ -8,6 +8,7 @@ import (
|
|
|
"git.swzry.com/zry/zry-go-program-framework/core"
|
|
|
ordmap "github.com/edofic/go-ordmap/v2"
|
|
|
"github.com/oklog/run"
|
|
|
+ "github.com/s0rg/trie"
|
|
|
"io"
|
|
|
"sync"
|
|
|
)
|
|
@@ -22,7 +23,7 @@ type AppFramework struct {
|
|
|
gctx context.Context
|
|
|
gcncl context.CancelFunc
|
|
|
subSvc ordmap.NodeBuiltin[string, *core.SubServiceWrapper]
|
|
|
- moduleLoggers map[string]core.IModuleLogger
|
|
|
+ moduleLoggers *trie.Trie[core.IModuleLogger]
|
|
|
moduleLoggersLock sync.RWMutex
|
|
|
appLogModuleName string
|
|
|
globalDebugSwitch bool
|
|
@@ -39,13 +40,13 @@ func NewAppFramework(globalDebugMode bool, appLogModuleName string) *AppFramewor
|
|
|
logger: hiedalog.NewHiedaLogger(),
|
|
|
subSvc: ordmap.NewBuiltin[string, *core.SubServiceWrapper](),
|
|
|
appLogModuleName: appLogModuleName,
|
|
|
- moduleLoggers: map[string]core.IModuleLogger{},
|
|
|
+ moduleLoggers: trie.New[core.IModuleLogger](),
|
|
|
globalDebugSwitch: globalDebugMode,
|
|
|
prepared: false,
|
|
|
mainLogLevelLimit: 0,
|
|
|
}
|
|
|
mlog := core.NewModuleLogger(appLogModuleName, f)
|
|
|
- f.moduleLoggers[appLogModuleName] = mlog
|
|
|
+ f.moduleLoggers.Add(appLogModuleName, mlog)
|
|
|
f.IModuleLogger = mlog
|
|
|
f.IModuleLogLevelLimiter = mlog
|
|
|
return f
|
|
@@ -99,12 +100,12 @@ func (f *AppFramework) GetRawLogger() *hiedalog.HiedaLogger {
|
|
|
|
|
|
func (f *AppFramework) GetModuleLogger(module string) core.IModuleLogger {
|
|
|
f.moduleLoggersLock.RLock()
|
|
|
- v, ok := f.moduleLoggers[module]
|
|
|
+ v, ok := f.moduleLoggers.Find(module)
|
|
|
if !ok {
|
|
|
f.moduleLoggersLock.RUnlock()
|
|
|
f.moduleLoggersLock.Lock()
|
|
|
v = core.NewModuleLogger(module, f)
|
|
|
- f.moduleLoggers[module] = v
|
|
|
+ f.moduleLoggers.Add(module, v)
|
|
|
f.moduleLoggersLock.Unlock()
|
|
|
} else {
|
|
|
f.moduleLoggersLock.RUnlock()
|
|
@@ -112,6 +113,14 @@ func (f *AppFramework) GetModuleLogger(module string) core.IModuleLogger {
|
|
|
return v
|
|
|
}
|
|
|
|
|
|
+func (f *AppFramework) DiscardSubLoggerByPrefix(prefix string) {
|
|
|
+ f.moduleLoggersLock.Lock()
|
|
|
+ defer f.moduleLoggersLock.Unlock()
|
|
|
+ f.moduleLoggers.Iter(prefix, func(key string, value core.IModuleLogger) {
|
|
|
+ f.moduleLoggers.Del(key)
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
// Prepare call the `Prepare()` of each SubService by order of addition
|
|
|
func (f *AppFramework) Prepare() error {
|
|
|
var err error
|