From f2f776931f89474d5bbb404113e0c80b3169989c Mon Sep 17 00:00:00 2001 From: David Zhao Date: Fri, 14 Jan 2022 17:44:28 -0800 Subject: [PATCH] Integrated logging with Pion (#341) * Integrated logging with Pion * handle nil logger --- go.mod | 6 ++-- go.sum | 10 +++--- pkg/rtc/logadapter.go | 77 +++++++++++++++++++++++++++++++++++++++++++ pkg/rtc/transport.go | 5 +++ pkg/sfu/downtrack.go | 5 +++ 5 files changed, 96 insertions(+), 7 deletions(-) create mode 100644 pkg/rtc/logadapter.go diff --git a/go.mod b/go.mod index 1de2f5f1e..bc02eaf14 100644 --- a/go.mod +++ b/go.mod @@ -28,7 +28,7 @@ require ( github.com/pion/stun v0.3.5 github.com/pion/transport v0.13.0 github.com/pion/turn/v2 v2.0.6 - github.com/pion/webrtc/v3 v3.1.14-0.20220107154618-d4b645635c44 + github.com/pion/webrtc/v3 v3.1.15 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.11.0 github.com/rs/cors v1.8.2 @@ -59,7 +59,7 @@ require ( github.com/mattn/go-runewidth v0.0.9 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect github.com/pion/datachannel v1.5.2 // indirect - github.com/pion/dtls/v2 v2.0.13 // indirect + github.com/pion/dtls/v2 v2.1.0 // indirect github.com/pion/mdns v0.0.5 // indirect github.com/pion/randutil v0.1.0 // indirect github.com/pion/sctp v1.8.2 // indirect @@ -72,7 +72,7 @@ require ( github.com/russross/blackfriday/v2 v2.1.0 // indirect go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect - golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871 // indirect + golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 // indirect golang.org/x/mod v0.5.1 // indirect golang.org/x/net v0.0.0-20211216030914-fe4d6282115f // indirect golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359 // indirect diff --git a/go.sum b/go.sum index ccd512945..4ab3c447f 100644 --- a/go.sum +++ b/go.sum @@ -170,8 +170,9 @@ github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/pion/datachannel v1.5.2 h1:piB93s8LGmbECrpO84DnkIVWasRMk3IimbcXkTQLE6E= github.com/pion/datachannel v1.5.2/go.mod h1:FTGQWaHrdCwIJ1rw6xBIfZVkslikjShim5yr05XFuCQ= -github.com/pion/dtls/v2 v2.0.13 h1:toLgXzq42/MEmfgkXDfzdnwLHMi4tfycaQPGkv9tzRE= github.com/pion/dtls/v2 v2.0.13/go.mod h1:OaE7eTM+ppaUhJ99OTO4aHl9uY6vPrT1gPY27uNTxRY= +github.com/pion/dtls/v2 v2.1.0 h1:g6gtKVNLp6URDkv9OijFJl16kqGHzVzZG+Fa4A38GTY= +github.com/pion/dtls/v2 v2.1.0/go.mod h1:qG3gA7ZPZemBqpEFqRKyURYdKEwFZQCGb7gv9T3ON3Y= github.com/pion/ice/v2 v2.1.18 h1:mDzd+iPKJmU30p4Kb+RPjK9olORLqJmQdiTUnVba50g= github.com/pion/ice/v2 v2.1.18/go.mod h1:9jDr0iIUg8P6+0Jq8QJ/eFSkX3JnsPd293TjCdkfpTs= github.com/pion/interceptor v0.1.4 h1:qL2xrdR6taLkVxEQj39btwEPRO3i9yd/olEw6+20dag= @@ -205,8 +206,8 @@ github.com/pion/turn/v2 v2.0.6 h1:AsXjSPR6Im15DMTB39NlfdTY9BQfieANPBjdg/aVNwY= github.com/pion/turn/v2 v2.0.6/go.mod h1:+y7xl719J8bAEVpSXBXvTxStjJv3hbz9YFflvkpcGPw= github.com/pion/udp v0.1.1 h1:8UAPvyqmsxK8oOjloDk4wUt63TzFe9WEJkg5lChlj7o= github.com/pion/udp v0.1.1/go.mod h1:6AFo+CMdKQm7UiA0eUPA8/eVCTx8jBIITLZHc9DWX5M= -github.com/pion/webrtc/v3 v3.1.14-0.20220107154618-d4b645635c44 h1:iyFRWBUrSxF8EHUtcvioKBzm1hOB/F15Zph93+7MWro= -github.com/pion/webrtc/v3 v3.1.14-0.20220107154618-d4b645635c44/go.mod h1:Vn1lK5z9AEmabct0TirkWdt67kpzd40KrpkxPIvQfgE= +github.com/pion/webrtc/v3 v3.1.15 h1:JUNR95xdhcRliAaUQjnuttFPdxGxW/ixcwnHRjQFWOU= +github.com/pion/webrtc/v3 v3.1.15/go.mod h1:2brQHPJl93QVgbcVElY5syrrEzx5PXCxjrQ5g7Hwky8= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -284,8 +285,9 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871 h1:/pEO3GD/ABYAjuakUS6xSEmmlyVS4kxBNkeA9tLJiTI= golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= diff --git a/pkg/rtc/logadapter.go b/pkg/rtc/logadapter.go new file mode 100644 index 000000000..248261277 --- /dev/null +++ b/pkg/rtc/logadapter.go @@ -0,0 +1,77 @@ +package rtc + +import ( + "fmt" + + "github.com/go-logr/logr" + "github.com/pion/logging" +) + +// implements webrtc.LoggerFactory +type loggerFactory struct { + logger logr.Logger +} + +func newLoggerFactory(logger logr.Logger) *loggerFactory { + if logger.GetSink() == nil { + return nil + } + return &loggerFactory{ + logger: logger, + } +} + +func (f *loggerFactory) NewLogger(scope string) logging.LeveledLogger { + return &logAdapter{ + logger: f.logger.WithName(scope), + // treat info as debug + verbosity: 1, + } +} + +// implements webrtc.LeveledLogger +type logAdapter struct { + logger logr.Logger + // 0 - most verbose + verbosity int +} + +func (l *logAdapter) Trace(msg string) { + l.Tracef(msg) +} + +func (l *logAdapter) Tracef(format string, args ...interface{}) { + l.logger.V(2 + l.verbosity).Info(fmt.Sprintf(format, args...)) +} + +func (l *logAdapter) Debug(msg string) { + l.Debugf(msg) +} + +func (l *logAdapter) Debugf(format string, args ...interface{}) { + l.logger.V(1 + l.verbosity).Info(fmt.Sprintf(format, args...)) +} + +func (l *logAdapter) Info(msg string) { + l.Infof(msg) +} + +func (l *logAdapter) Infof(format string, args ...interface{}) { + l.logger.V(l.verbosity).Info(fmt.Sprintf(format, args...)) +} + +func (l *logAdapter) Warn(msg string) { + l.Warnf(msg) +} + +func (l *logAdapter) Warnf(format string, args ...interface{}) { + l.logger.Info(fmt.Sprintf(format, args...)) +} + +func (l *logAdapter) Error(msg string) { + l.Errorf(msg) +} + +func (l *logAdapter) Errorf(format string, args ...interface{}) { + l.logger.Error(nil, fmt.Sprintf(format, args...)) +} diff --git a/pkg/rtc/transport.go b/pkg/rtc/transport.go index 7577d2bcd..5b5a38b75 100644 --- a/pkg/rtc/transport.go +++ b/pkg/rtc/transport.go @@ -7,6 +7,7 @@ import ( "time" "github.com/bep/debounce" + "github.com/go-logr/logr" "github.com/livekit/protocol/livekit" "github.com/livekit/protocol/logger" "github.com/pion/interceptor" @@ -84,6 +85,10 @@ func newPeerConnection(params TransportParams) (*webrtc.PeerConnection, *webrtc. se := params.Config.SettingEngine se.DisableMediaEngineCopy(true) + lf := newLoggerFactory(logr.Logger(params.Logger)) + if lf != nil { + se.LoggerFactory = lf + } ir := &interceptor.Registry{} if params.Target == livekit.SignalTarget_SUBSCRIBER { diff --git a/pkg/sfu/downtrack.go b/pkg/sfu/downtrack.go index 2fa6cb61f..a0614b486 100644 --- a/pkg/sfu/downtrack.go +++ b/pkg/sfu/downtrack.go @@ -229,6 +229,11 @@ func (d *DownTrack) Kind() webrtc.RTPCodecType { return d.kind } +// RID is required by `webrtc.TrackLocal` interface +func (d *DownTrack) RID() string { + return "" +} + func (d *DownTrack) SSRC() uint32 { return d.ssrc }