diff --git a/daemon/internal/newrelic/log_events.go b/daemon/internal/newrelic/log_events.go index d927b4418..6f18c2fdb 100644 --- a/daemon/internal/newrelic/log_events.go +++ b/daemon/internal/newrelic/log_events.go @@ -76,21 +76,25 @@ func (events *LogEvents) CollectorJSON(id AgentRunID) ([]byte, error) { estimate := len(es) * 128 buf.Grow(estimate) buf.WriteString(`[{` + - `"common": {"attributes": {`) + `"common": {"attributes": `) nwrit := 0 - for _, value := range events.LogForwardingLabels { - if nwrit > 0 { - buf.WriteByte(',') + labelMap := make(map[string]string) + for _, label := range events.LogForwardingLabels { + // safegaurd against invalid labels + if len(label.LabelType) != 0 && len(label.LabelValue) != 0 { + labelMap["tags."+label.LabelType] = label.LabelValue } - nwrit++ - buf.WriteString(`"tags.`) - buf.WriteString(value.LabelType) - buf.WriteString(`":"`) - buf.WriteString(value.LabelValue) - buf.WriteString(`"`) } - buf.WriteString(`}},` + + j, e := json.Marshal(labelMap) + if e != nil { + log.Errorf("failed to marshal log label: %s", e) + buf.WriteString("{}") + } else { + buf.Write(j) + } + + buf.WriteString(`},` + `"logs": [`) nwrit = 0 diff --git a/daemon/internal/newrelic/log_events_test.go b/daemon/internal/newrelic/log_events_test.go index c0fb3d7d6..0f98e3132 100644 --- a/daemon/internal/newrelic/log_events_test.go +++ b/daemon/internal/newrelic/log_events_test.go @@ -27,6 +27,8 @@ var ( LogForwardingLabelsTestCase{name: "Invalid keys", labels: `[{"label_tipe":"type1","label_valyue":"value1"}]`, expected: `{}`}, LogForwardingLabelsTestCase{name: "Space in value", labels: `[{"label_type":"type1","label_value":"value 1"}]`, expected: `{"tags.type1":"value 1"}`}, LogForwardingLabelsTestCase{name: "Space in key", labels: `[{"label_type":"type 1","label_value":"value1"}]`, expected: `{"tags.type 1":"value1"}`}, + LogForwardingLabelsTestCase{name: "Empty value", labels: `[{"label_type":"type1","label_value":""}]`, expected: `{}`}, + LogForwardingLabelsTestCase{name: "Empty key", labels: `[{"label_type":"","label_value":"value1"}]`, expected: `{}`}, } )