Skip to content

Commit f506fde

Browse files
authored
Do not drop unmarshallable service logs (#110)
Do not drop unmarshallable service logs. Wrap the unmarshallable value with default values so it can be passed to appender.
1 parent 0d1e155 commit f506fde

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

servicelog/scraper/json.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bufio"
55
"encoding/json"
66
"io"
7+
"time"
78

89
log "github.com/sirupsen/logrus"
910

@@ -26,10 +27,9 @@ func (j *JSON) StartScraping(reader io.Reader) <-chan servicelog.Entry {
2627
for scanner.Scan() {
2728
logEntry := servicelog.Entry{}
2829
if err := json.Unmarshal(scanner.Bytes(), &logEntry); err != nil {
29-
log.WithError(err).Warn("Unable to unmarshal log entry - skipping line")
30-
continue
31-
}
32-
if j.KeyFilter != nil {
30+
log.WithError(err).Debug("Unable to unmarshal log entry - wrapping in default entry")
31+
logEntry = j.wrapInDefault(scanner.Bytes())
32+
} else if j.KeyFilter != nil {
3333
for key := range logEntry {
3434
if j.KeyFilter.Match([]byte(key)) {
3535
delete(logEntry, key)
@@ -43,3 +43,12 @@ func (j *JSON) StartScraping(reader io.Reader) <-chan servicelog.Entry {
4343

4444
return logEntries
4545
}
46+
47+
func (j *JSON) wrapInDefault(bytes []byte) servicelog.Entry {
48+
return servicelog.Entry{
49+
"time": time.Now().Format(time.RFC3339Nano),
50+
"level": "INFO",
51+
"logger": "invalid-format",
52+
"msg": string(bytes),
53+
}
54+
}

servicelog/scraper/json_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,17 @@ func TestIfFiltersKeysFromScrapedJSONs(t *testing.T) {
3535
assert.Equal(t, "d", entry["c"])
3636
assert.Len(t, entry, 1)
3737
}
38+
39+
func TestIfWrapsInDefualtValuesInvalidLogEntries(t *testing.T) {
40+
reader, writer := io.Pipe()
41+
scraper := JSON{}
42+
43+
entries := scraper.StartScraping(reader)
44+
go writer.Write([]byte("ERROR my invalid format\n"))
45+
46+
entry := <-entries
47+
48+
assert.Equal(t, "ERROR my invalid format", entry["msg"])
49+
assert.Equal(t, "invalid-format", entry["logger"])
50+
assert.Equal(t, "INFO", entry["level"])
51+
}

0 commit comments

Comments
 (0)