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:
Marten Seemann
2025-10-08 11:53:02 +08:00
committed by GitHub
parent c9d3778fe0
commit c2131eb595
90 changed files with 5146 additions and 7787 deletions

View File

@@ -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