Files
quic-go/integrationtests/tools/qlog.go
Marten Seemann c2131eb595 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
2025-10-08 05:53:02 +02:00

49 lines
1.3 KiB
Go

package tools
import (
"bufio"
"context"
"fmt"
"io"
"log"
"os"
"time"
"github.com/quic-go/quic-go"
"github.com/quic-go/quic-go/internal/utils"
"github.com/quic-go/quic-go/qlogwriter"
)
func QlogTracer(logger io.Writer) qlogwriter.Trace {
filename := fmt.Sprintf("log_%s_transport.qlog", time.Now().Format("2006-01-02T15:04:05"))
fmt.Fprintf(logger, "Creating %s.\n", filename)
f, err := os.Create(filename)
if err != nil {
log.Fatalf("failed to create qlog file: %s", err)
return nil
}
bw := bufio.NewWriter(f)
fileSeq := qlogwriter.NewFileSeq(utils.NewBufferedWriteCloser(bw, f))
go fileSeq.Run()
return fileSeq
}
func NewQlogConnectionTracer(logger io.Writer) func(ctx context.Context, isClient bool, connID quic.ConnectionID) qlogwriter.Trace {
return func(_ context.Context, isClient bool, connID quic.ConnectionID) qlogwriter.Trace {
pers := "server"
if isClient {
pers = "client"
}
filename := fmt.Sprintf("log_%s_%s.qlog", connID, pers)
fmt.Fprintf(logger, "Creating %s.\n", filename)
f, err := os.Create(filename)
if err != nil {
log.Fatalf("failed to create qlog file: %s", err)
return nil
}
fileSeq := qlogwriter.NewConnectionFileSeq(utils.NewBufferedWriteCloser(bufio.NewWriter(f), f), isClient, connID)
go fileSeq.Run()
return fileSeq
}
}