aboutsummaryrefslogtreecommitdiff
path: root/modules/log/event.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/log/event.go')
-rw-r--r--modules/log/event.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/modules/log/event.go b/modules/log/event.go
index f66ecd179..41bb241da 100644
--- a/modules/log/event.go
+++ b/modules/log/event.go
@@ -89,8 +89,10 @@ func (l *ChannelledLog) Start() {
l.closeLogger()
return
}
+ l.emptyQueue()
l.loggerProvider.Flush()
case <-l.close:
+ l.emptyQueue()
l.closeLogger()
return
}
@@ -111,6 +113,20 @@ func (l *ChannelledLog) LogEvent(event *Event) error {
}
}
+func (l *ChannelledLog) emptyQueue() bool {
+ for {
+ select {
+ case event, ok := <-l.queue:
+ if !ok {
+ return false
+ }
+ l.loggerProvider.LogEvent(event)
+ default:
+ return true
+ }
+ }
+}
+
func (l *ChannelledLog) closeLogger() {
l.loggerProvider.Flush()
l.loggerProvider.Close()
@@ -345,18 +361,41 @@ func (m *MultiChannelledLog) Start() {
m.closeLoggers()
return
}
+ m.emptyQueue()
m.rwmutex.RLock()
for _, logger := range m.loggers {
logger.Flush()
}
m.rwmutex.RUnlock()
case <-m.close:
+ m.emptyQueue()
m.closeLoggers()
return
}
}
}
+func (m *MultiChannelledLog) emptyQueue() bool {
+ for {
+ select {
+ case event, ok := <-m.queue:
+ if !ok {
+ return false
+ }
+ m.rwmutex.RLock()
+ for _, logger := range m.loggers {
+ err := logger.LogEvent(event)
+ if err != nil {
+ fmt.Println(err)
+ }
+ }
+ m.rwmutex.RUnlock()
+ default:
+ return true
+ }
+ }
+}
+
// LogEvent logs an event to this MultiChannelledLog
func (m *MultiChannelledLog) LogEvent(event *Event) error {
select {