diff --git a/logging/telemetryhook.go b/logging/telemetryhook.go index 149f9075b3..48aeacc1a6 100644 --- a/logging/telemetryhook.go +++ b/logging/telemetryhook.go @@ -48,7 +48,25 @@ func createAsyncHookLevels(wrappedHook logrus.Hook, channelDepth uint, maxQueueD } go func() { - defer hook.wg.Done() + defer func() { + // flush the channel + moreEntries := true + for moreEntries { + select { + case entry := <-hook.entries: + hook.appendEntry(entry) + default: + moreEntries = false + } + } + for range hook.pending { + // The telemetry service is + // exiting. Un-wait for the left out + // messages. + hook.wg.Done() + } + hook.wg.Done() + }() exit := false for !exit { @@ -126,6 +144,9 @@ func (hook *asyncTelemetryHook) waitForEventAndReady() bool { func (hook *asyncTelemetryHook) Fire(entry *logrus.Entry) error { hook.wg.Add(1) select { + case <-hook.quit: + // telemetry quit + hook.wg.Done() case hook.entries <- entry: default: hook.wg.Done()