diff --git a/log.go b/log.go index 7732d7d..e570561 100644 --- a/log.go +++ b/log.go @@ -336,13 +336,17 @@ func (el *eventLogger) Event(ctx context.Context, event string, metadata ...Logg accum["system"] = e.system accum["time"] = FormatRFC3339(time.Now()) - out, err := json.Marshal(accum) + var buf bytes.Buffer + encoder := json.NewEncoder(&buf) + encoder.SetEscapeHTML(false) + encoder.SetIndent("", " ") + err = encoder.Encode(accum) if err != nil { el.Errorf("ERROR FORMATTING EVENT ENTRY: %s", err) return } - writer.WriterGroup.Write(append(out, '\n')) + writer.WriterGroup.Write(buf.Bytes()) } // DEPRECATED diff --git a/tracer/recorder.go b/tracer/recorder.go index 60ed1f8..0107103 100644 --- a/tracer/recorder.go +++ b/tracer/recorder.go @@ -1,6 +1,8 @@ package loggabletracer import ( + "bytes" + "encoding/base64" "encoding/json" "fmt" "os" @@ -65,6 +67,18 @@ func (r *LoggableSpanRecorder) RecordSpan(span RawSpan) { } } + tags := make(map[string]interface{}, len(span.Tags)) + for k, v := range span.Tags { + switch vt := v.(type) { + case bool, string, int, int8, int16, int32, int64, uint, uint8, uint16, uint64: + tags[k] = v + case []byte: + base64.StdEncoding.EncodeToString(vt) + default: + tags[k] = fmt.Sprint(v) + } + } + spanlog := &LoggableSpan{ TraceID: span.Context.TraceID, SpanID: span.Context.SpanID, @@ -72,15 +86,19 @@ func (r *LoggableSpanRecorder) RecordSpan(span RawSpan) { Operation: span.Operation, Start: span.Start, Duration: span.Duration, - Tags: span.Tags, + Tags: tags, Logs: sl, } - out, err := json.Marshal(spanlog) + var buf bytes.Buffer + encoder := json.NewEncoder(&buf) + encoder.SetEscapeHTML(false) + encoder.SetIndent("", " ") + err := encoder.Encode(spanlog) if err != nil { fmt.Fprintf(os.Stderr, "ERROR FORMATTING SPAN ENTRY: %s\n", err) return } - writer.WriterGroup.Write(append(out, '\n')) + writer.WriterGroup.Write(buf.Bytes()) }