diff options
Diffstat (limited to 'modules/log/event.go')
-rw-r--r-- | modules/log/event.go | 39 |
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 { |