diff --git a/client/iface/bind/udp_mux.go b/client/iface/bind/udp_mux.go index 4c827de95..5a471bf24 100644 --- a/client/iface/bind/udp_mux.go +++ b/client/iface/bind/udp_mux.go @@ -150,7 +150,7 @@ func isZeros(ip net.IP) bool { // NewUDPMuxDefault creates an implementation of UDPMux func NewUDPMuxDefault(params UDPMuxParams) *UDPMuxDefault { if params.Logger == nil { - params.Logger = logging.NewDefaultLoggerFactory().NewLogger("ice") + params.Logger = getLogger() } mux := &UDPMuxDefault{ @@ -455,3 +455,9 @@ func newBufferHolder(size int) *bufferHolder { buf: make([]byte, size), } } + +func getLogger() logging.LeveledLogger { + fac := logging.NewDefaultLoggerFactory() + fac.Writer = log.StandardLogger().Writer() + return fac.NewLogger("ice") +} diff --git a/client/iface/bind/udp_mux_universal.go b/client/iface/bind/udp_mux_universal.go index 6f851393e..9fed02bb7 100644 --- a/client/iface/bind/udp_mux_universal.go +++ b/client/iface/bind/udp_mux_universal.go @@ -49,7 +49,7 @@ type UniversalUDPMuxParams struct { // NewUniversalUDPMuxDefault creates an implementation of UniversalUDPMux embedding UDPMux func NewUniversalUDPMuxDefault(params UniversalUDPMuxParams) *UniversalUDPMuxDefault { if params.Logger == nil { - params.Logger = logging.NewDefaultLoggerFactory().NewLogger("ice") + params.Logger = getLogger() } if params.XORMappedAddrCacheTTL == 0 { params.XORMappedAddrCacheTTL = time.Second * 25 diff --git a/client/internal/peer/ice/agent.go b/client/internal/peer/ice/agent.go index af9e60f2d..2b66610e9 100644 --- a/client/internal/peer/ice/agent.go +++ b/client/internal/peer/ice/agent.go @@ -4,6 +4,7 @@ import ( "time" "github.com/pion/ice/v3" + "github.com/pion/logging" "github.com/pion/randutil" log "github.com/sirupsen/logrus" @@ -35,6 +36,9 @@ func NewAgent(iFaceDiscover stdnet.ExternalIFaceDiscover, config Config, candida log.Errorf("failed to create pion's stdnet: %s", err) } + fac := logging.NewDefaultLoggerFactory() + fac.Writer = log.StandardLogger().Writer() + agentConfig := &ice.AgentConfig{ MulticastDNSMode: ice.MulticastDNSModeDisabled, NetworkTypes: []ice.NetworkType{ice.NetworkTypeUDP4, ice.NetworkTypeUDP6}, @@ -51,6 +55,7 @@ func NewAgent(iFaceDiscover stdnet.ExternalIFaceDiscover, config Config, candida RelayAcceptanceMinWait: &iceRelayAcceptanceMinWait, LocalUfrag: ufrag, LocalPwd: pwd, + LoggerFactory: fac, } if config.DisableIPv6Discovery { diff --git a/formatter/hook/hook.go b/formatter/hook/hook.go index 1b6ceccc9..290c3377d 100644 --- a/formatter/hook/hook.go +++ b/formatter/hook/hook.go @@ -3,6 +3,7 @@ package hook import ( "fmt" "path" + "runtime" "runtime/debug" "strings" @@ -40,8 +41,12 @@ func (hook ContextHook) Levels() []logrus.Level { // Fire extend with the source information the entry.Data func (hook ContextHook) Fire(entry *logrus.Entry) error { - src := hook.parseSrc(entry.Caller.File) - entry.Data[EntryKeySource] = fmt.Sprintf("%s:%v", src, entry.Caller.Line) + caller := &runtime.Frame{Line: 0, File: "caller_not_available"} + if entry.Caller != nil { + caller = entry.Caller + } + src := hook.parseSrc(caller.File) + entry.Data[EntryKeySource] = fmt.Sprintf("%s:%v", src, caller.Line) additionalEntries(entry) if entry.Context == nil { diff --git a/util/log.go b/util/log.go index 7a9235ee6..59a064366 100644 --- a/util/log.go +++ b/util/log.go @@ -8,6 +8,7 @@ import ( "strconv" log "github.com/sirupsen/logrus" + "google.golang.org/grpc/grpclog" "gopkg.in/natefinch/lumberjack.v2" "github.com/netbirdio/netbird/formatter" @@ -48,9 +49,28 @@ func InitLog(logLevel string, logPath string) error { formatter.SetTextFormatter(log.StandardLogger()) } log.SetLevel(level) + + setGRPCLibLogger() + return nil } +func setGRPCLibLogger() { + logOut := log.StandardLogger().Writer() + if os.Getenv("GRPC_GO_LOG_SEVERITY_LEVEL") != "info" { + grpclog.SetLoggerV2(grpclog.NewLoggerV2(io.Discard, logOut, logOut)) + return + } + + var v int + vLevel := os.Getenv("GRPC_GO_LOG_VERBOSITY_LEVEL") + if vl, err := strconv.Atoi(vLevel); err == nil { + v = vl + } + + grpclog.SetLoggerV2(grpclog.NewLoggerV2WithVerbosity(logOut, logOut, logOut, v)) +} + func getLogMaxSize() int { if sizeVar, ok := os.LookupEnv("NB_LOG_MAX_SIZE_MB"); ok { size, err := strconv.ParseInt(sizeVar, 10, 64)