Browse Source

Add sub log discard feature.

ZRY 8 months ago
parent
commit
a6d54dcab9
5 changed files with 31 additions and 5 deletions
  1. 4 0
      core/intf.go
  2. 10 0
      core/mod_log.go
  3. 14 5
      svcfw/framework.go
  4. 1 0
      svcfw/go.mod
  5. 2 0
      svcfw/go.sum

+ 4 - 0
core/intf.go

@@ -32,6 +32,7 @@ type ILogger interface {
 	BLDebugC(module string, data map[string]string)
 
 	GetModuleLogger(module string) IModuleLogger
+	DiscardSubLoggerByPrefix(prefix string)
 }
 
 type IModuleLogger interface {
@@ -65,6 +66,9 @@ type IModuleLogger interface {
 
 	GetModuleName() string
 	GetSubLog(suffix string) IModuleLogger
+
+	CloseSubLog(suffix string)
+	CloseThisLog()
 }
 
 type IModuleLogLevelLimiter interface {

+ 10 - 0
core/mod_log.go

@@ -11,6 +11,16 @@ type ModuleLogger struct {
 	baseLogger ILogger
 }
 
+func (ml *ModuleLogger) CloseThisLog() {
+	ml.baseLogger.DiscardSubLoggerByPrefix(ml.module)
+}
+
+func (ml *ModuleLogger) CloseSubLog(suffix string) {
+	prefix := ml.module
+	name := fmt.Sprintf("%s/%s", prefix, suffix)
+	ml.baseLogger.DiscardSubLoggerByPrefix(name)
+}
+
 func (ml *ModuleLogger) LimitLogLevel(level uint8) {
 	if level > 4 {
 		ml.levelLimit = 0

+ 14 - 5
svcfw/framework.go

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

+ 1 - 0
svcfw/go.mod

@@ -8,6 +8,7 @@ require (
 	git.swzry.com/zry/zry-go-program-framework/core v0.0.0-20230814163048-27836c09f169
 	github.com/edofic/go-ordmap/v2 v2.0.0
 	github.com/oklog/run v1.1.0
+	github.com/s0rg/trie v1.2.0
 )
 
 require github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31 // indirect

+ 2 - 0
svcfw/go.sum

@@ -10,6 +10,8 @@ github.com/edofic/go-ordmap/v2 v2.0.0/go.mod h1:BF4fX5pcyMRO/VidWMgFfDleHEdg+wPp
 github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
 github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/s0rg/trie v1.2.0 h1:sN0EvZuqIxleXZECZ5GZqd+jOYRMR/yZeSPfWSrZr48=
+github.com/s0rg/trie v1.2.0/go.mod h1:P+hJUWvPu/imKrsdzOrVswr8Mme6GgFtZfBKojYYkfk=
 github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
 github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31 h1:OXcKh35JaYsGMRzpvFkLv/MEyPuL49CThT1pZ8aSml4=
 github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q=