Skip to content

Commit 819297b

Browse files
lvan100lianghuan
authored andcommitted
111
1 parent 682598a commit 819297b

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

plugin_logger.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package log
1818

1919
import (
20+
"sort"
2021
"sync/atomic"
2122

2223
"github.com/go-spring/spring-base/util"
@@ -124,6 +125,23 @@ type AppenderRefs struct {
124125
AppenderRefs []*AppenderRef `PluginElement:"AppenderRef"`
125126
}
126127

128+
// sortByLevel sorts appender references by level.
129+
func (c *AppenderRefs) sortByLevel() {
130+
131+
// Sort appender references by level
132+
sort.Slice(c.AppenderRefs, func(i, j int) bool {
133+
iCode := c.AppenderRefs[i].Level.MinLevel.code
134+
jCode := c.AppenderRefs[j].Level.MinLevel.code
135+
return iCode < jCode
136+
})
137+
138+
for i := len(c.AppenderRefs) - 1; i >= 1; i-- {
139+
if c.AppenderRefs[i-1].Level.MaxLevel == MaxLevel {
140+
c.AppenderRefs[i-1].Level.MaxLevel = c.AppenderRefs[i].Level.MinLevel
141+
}
142+
}
143+
}
144+
127145
// Append forwards events to each child appender.
128146
func (c *AppenderRefs) sendToAppenders(e *Event) {
129147
for _, r := range c.AppenderRefs {
@@ -148,8 +166,10 @@ type SyncLogger struct {
148166
AppenderRefs
149167
}
150168

151-
func (c *SyncLogger) Start() error { return nil }
152-
func (c *SyncLogger) Stop() {}
169+
func (c *SyncLogger) Start() error {
170+
c.AppenderRefs.sortByLevel()
171+
return nil
172+
}
153173

154174
// Append sends the event directly to appenders (blocking).
155175
func (c *SyncLogger) Append(e *Event) {
@@ -169,6 +189,8 @@ func (c *SyncLogger) Write(b []byte) {
169189
c.writeToAppenders(MaxLevel, b)
170190
}
171191

192+
func (c *SyncLogger) Stop() {}
193+
172194
// BufferFullPolicy specifies what to do when an async buffer is full.
173195
type BufferFullPolicy int
174196

@@ -218,10 +240,13 @@ func (c *AsyncLogger) Start() error {
218240
if c.BufferSize < 100 {
219241
return util.FormatError(nil, "bufferSize is too small")
220242
}
243+
221244
c.buf = make(chan any, c.BufferSize)
222245
c.wait = make(chan struct{})
223246
c.stop = &Event{}
224247

248+
c.AppenderRefs.sortByLevel()
249+
225250
// Worker goroutine to process buffered items
226251
go func() {
227252
for v := range c.buf {

0 commit comments

Comments
 (0)