package tracer import ( "encoding/json" "fmt" "os" ) type jsonTracerTransport struct { out *os.File } func NewJsonTracerTransport(file string) (TracerTransport, error) { out, err := os.OpenFile(file, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0660) if err != nil { return nil, err } return &jsonTracerTransport{ out: out, }, nil } func (jtt *jsonTracerTransport) Transport(evt TracerTransportEvent) error { var e interface{} if evt.lotusTraceEvent != nil { e = *evt.lotusTraceEvent } else if evt.pubsubTraceEvent != nil { e = *evt.pubsubTraceEvent } else { return nil } jsonEvt, err := json.Marshal(e) if err != nil { return fmt.Errorf("error while marshaling event: %s", err) } _, err = jtt.out.Write(jsonEvt) return err }