Skip to content

Commit 4e445d6

Browse files
committed
Empty log queue on flush and close
It is possible for log events to remain in the buffer off the multichannelledlog and thus not be logged despite close or flush. This PR simply adds a function to empty the queue before closing or flushing. (Except when the logger is paused.) Reference go-gitea#19982 Signed-off-by: Andrew Thornton <[email protected]>
1 parent 9068c78 commit 4e445d6

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

modules/log/event.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,18 +345,41 @@ func (m *MultiChannelledLog) Start() {
345345
m.closeLoggers()
346346
return
347347
}
348+
m.emptyQueue()
348349
m.rwmutex.RLock()
349350
for _, logger := range m.loggers {
350351
logger.Flush()
351352
}
352353
m.rwmutex.RUnlock()
353354
case <-m.close:
355+
m.emptyQueue()
354356
m.closeLoggers()
355357
return
356358
}
357359
}
358360
}
359361

362+
func (m *MultiChannelledLog) emptyQueue() bool {
363+
for {
364+
select {
365+
case event, ok := <-m.queue:
366+
if !ok {
367+
return false
368+
}
369+
m.rwmutex.RLock()
370+
for _, logger := range m.loggers {
371+
err := logger.LogEvent(event)
372+
if err != nil {
373+
fmt.Println(err)
374+
}
375+
}
376+
m.rwmutex.RUnlock()
377+
default:
378+
return true
379+
}
380+
}
381+
}
382+
360383
// LogEvent logs an event to this MultiChannelledLog
361384
func (m *MultiChannelledLog) LogEvent(event *Event) error {
362385
select {

0 commit comments

Comments
 (0)