forked from quic-go/quic-go
qlog: split serializiation and event definitions, remove logging abstraction (#5356)
* qlog: implement a Trace and a Writer struct * qlog: rename Trace to FileSeq * split qlog trace writer and QUIC qlog events into separate packages * use the new qlog.Recorder instead of the logging.ConnectionTracer
This commit is contained in:
@@ -9,7 +9,7 @@ import (
|
||||
|
||||
"github.com/quic-go/quic-go"
|
||||
"github.com/quic-go/quic-go/integrationtests/tools"
|
||||
"github.com/quic-go/quic-go/logging"
|
||||
"github.com/quic-go/quic-go/qlogwriter"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -49,6 +49,39 @@ func init() {
|
||||
func getTLSConfig() *tls.Config { return tlsConfig }
|
||||
func getTLSClientConfig() *tls.Config { return tlsClientConfig }
|
||||
|
||||
type multiplexedRecorder struct {
|
||||
Recorders []qlogwriter.Recorder
|
||||
}
|
||||
|
||||
var _ qlogwriter.Recorder = &multiplexedRecorder{}
|
||||
|
||||
func (r *multiplexedRecorder) Close() error {
|
||||
for _, recorder := range r.Recorders {
|
||||
recorder.Close()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *multiplexedRecorder) RecordEvent(ev qlogwriter.Event) {
|
||||
for _, recorder := range r.Recorders {
|
||||
recorder.RecordEvent(ev)
|
||||
}
|
||||
}
|
||||
|
||||
type multiplexedTrace struct {
|
||||
Traces []qlogwriter.Trace
|
||||
}
|
||||
|
||||
var _ qlogwriter.Trace = &multiplexedTrace{}
|
||||
|
||||
func (t *multiplexedTrace) AddProducer() qlogwriter.Recorder {
|
||||
recorders := make([]qlogwriter.Recorder, 0, len(t.Traces))
|
||||
for _, tr := range t.Traces {
|
||||
recorders = append(recorders, tr.AddProducer())
|
||||
}
|
||||
return &multiplexedRecorder{Recorders: recorders}
|
||||
}
|
||||
|
||||
func maybeAddQLOGTracer(c *quic.Config) *quic.Config {
|
||||
if c == nil {
|
||||
c = &quic.Config{}
|
||||
@@ -61,11 +94,15 @@ func maybeAddQLOGTracer(c *quic.Config) *quic.Config {
|
||||
c.Tracer = qlogger
|
||||
} else if qlogger != nil {
|
||||
origTracer := c.Tracer
|
||||
c.Tracer = func(ctx context.Context, p logging.Perspective, connID quic.ConnectionID) *logging.ConnectionTracer {
|
||||
return logging.NewMultiplexedConnectionTracer(
|
||||
qlogger(ctx, p, connID),
|
||||
origTracer(ctx, p, connID),
|
||||
)
|
||||
c.Tracer = func(ctx context.Context, p bool, connID quic.ConnectionID) qlogwriter.Trace {
|
||||
var traces []qlogwriter.Trace
|
||||
if origTracer != nil {
|
||||
traces = append(traces, origTracer(ctx, p, connID))
|
||||
}
|
||||
if qlogger != nil {
|
||||
traces = append(traces, qlogger(ctx, p, connID))
|
||||
}
|
||||
return &multiplexedTrace{Traces: traces}
|
||||
}
|
||||
}
|
||||
return c
|
||||
|
||||
Reference in New Issue
Block a user