Browse Source

Split up warnings so the entire slice does not have to be iterated through

pull/435/head
Gabe Kangas 5 years ago
parent
commit
45fef4659a
  1. 23
      logging/logging.go

23
logging/logging.go

@ -15,8 +15,9 @@ import ( @@ -15,8 +15,9 @@ import (
const maxLogEntries = 500
type OCLogger struct {
Entries []logrus.Entry
mu sync.RWMutex
Entries []logrus.Entry
Warnings []logrus.Entry
mu sync.RWMutex
}
var Logger *OCLogger
@ -37,11 +38,19 @@ func (l *OCLogger) Fire(e *logger.Entry) error { @@ -37,11 +38,19 @@ func (l *OCLogger) Fire(e *logger.Entry) error {
l.mu.Lock()
defer l.mu.Unlock()
// Append to log entries
if len(l.Entries) > maxLogEntries {
l.Entries = l.Entries[1:]
}
l.Entries = append(l.Entries, *e)
if e.Level <= logger.WarnLevel {
if len(l.Warnings) > maxLogEntries {
l.Warnings = l.Warnings[1:]
}
l.Warnings = append(l.Warnings, *e)
}
return nil
}
@ -56,7 +65,7 @@ func (l *OCLogger) AllEntries() []*logrus.Entry { @@ -56,7 +65,7 @@ func (l *OCLogger) AllEntries() []*logrus.Entry {
defer l.mu.RUnlock()
// Make a copy so the returned value won't race with future log requests
logCount := int(math.Min(float64(len(l.Entries)), 800.0))
logCount := int(math.Min(float64(len(l.Entries)), maxLogEntries))
entries := make([]*logrus.Entry, logCount)
for i := 0; i < len(entries); i++ {
// Make a copy, for safety
@ -72,13 +81,11 @@ func (l *OCLogger) WarningEntries() []*logrus.Entry { @@ -72,13 +81,11 @@ func (l *OCLogger) WarningEntries() []*logrus.Entry {
defer l.mu.RUnlock()
// Make a copy so the returned value won't race with future log requests
logCount := int(math.Min(float64(len(l.Entries)), 100.0))
logCount := int(math.Min(float64(len(l.Warnings)), maxLogEntries))
entries := make([]*logrus.Entry, logCount)
for i := 0; i < len(entries); i++ {
if l.Entries[i].Level <= logrus.WarnLevel {
// Make a copy, for safety
entries[len(entries)-logCount:][i] = &l.Entries[i]
}
// Make a copy, for safety
entries[len(entries)-logCount:][i] = &l.Warnings[i]
}
return entries

Loading…
Cancel
Save