github.com/apernet/quic-go@v0.43.1-0.20240515053213-5e9e635fd9f0/interop/utils/logging.go (about) 1 package utils 2 3 import ( 4 "bufio" 5 "context" 6 "fmt" 7 "io" 8 "log" 9 "os" 10 "strings" 11 12 "github.com/apernet/quic-go" 13 "github.com/apernet/quic-go/internal/utils" 14 "github.com/apernet/quic-go/logging" 15 "github.com/apernet/quic-go/qlog" 16 ) 17 18 // GetSSLKeyLog creates a file for the TLS key log 19 func GetSSLKeyLog() (io.WriteCloser, error) { 20 filename := os.Getenv("SSLKEYLOGFILE") 21 if len(filename) == 0 { 22 return nil, nil 23 } 24 f, err := os.Create(filename) 25 if err != nil { 26 return nil, err 27 } 28 return f, nil 29 } 30 31 // NewQLOGConnectionTracer create a qlog file in QLOGDIR 32 func NewQLOGConnectionTracer(_ context.Context, p logging.Perspective, connID quic.ConnectionID) *logging.ConnectionTracer { 33 qlogDir := os.Getenv("QLOGDIR") 34 if len(qlogDir) == 0 { 35 return nil 36 } 37 if _, err := os.Stat(qlogDir); os.IsNotExist(err) { 38 if err := os.MkdirAll(qlogDir, 0o666); err != nil { 39 log.Fatalf("failed to create qlog dir %s: %v", qlogDir, err) 40 } 41 } 42 path := fmt.Sprintf("%s/%s.qlog", strings.TrimRight(qlogDir, "/"), connID) 43 f, err := os.Create(path) 44 if err != nil { 45 log.Printf("Failed to create qlog file %s: %s", path, err.Error()) 46 return nil 47 } 48 log.Printf("Created qlog file: %s\n", path) 49 return qlog.NewConnectionTracer(utils.NewBufferedWriteCloser(bufio.NewWriter(f), f), p, connID) 50 }