From 6fdfd968c382b6693434ec84ca0eb822587b6e35 Mon Sep 17 00:00:00 2001 From: Eugene Kim Date: Sat, 15 Jun 2019 22:56:34 -0700 Subject: [PATCH] Make connection logger take a custom logger --- cmd/bootnode/main.go | 2 +- cmd/harmony/main.go | 2 +- internal/utils/connlogger.go | 50 +++++++++++++++++++++--------------- 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/cmd/bootnode/main.go b/cmd/bootnode/main.go index cba0ecd2d..cf85613de 100644 --- a/cmd/bootnode/main.go +++ b/cmd/bootnode/main.go @@ -77,7 +77,7 @@ func main() { log.Info("bootnode", "BN_MA", fmt.Sprintf("/ip4/%s/tcp/%s/p2p/%s", *ip, *port, host.GetID().Pretty())) if *logConn { - host.GetP2PHost().Network().Notify(utils.ConnLogger) + host.GetP2PHost().Network().Notify(utils.RootConnLogger) } dataStore := dsync.MutexWrap(ds.NewMapDatastore()) diff --git a/cmd/harmony/main.go b/cmd/harmony/main.go index 80877c3c0..b0955e49c 100644 --- a/cmd/harmony/main.go +++ b/cmd/harmony/main.go @@ -291,7 +291,7 @@ func createGlobalConfig() *nodeconfig.ConfigType { nodeConfig.Host, err = p2pimpl.NewHost(&nodeConfig.SelfPeer, nodeConfig.P2pPriKey) if *logConn { - nodeConfig.Host.GetP2PHost().Network().Notify(utils.ConnLogger) + nodeConfig.Host.GetP2PHost().Network().Notify(utils.RootConnLogger) } if err != nil { panic("unable to new host in harmony") diff --git a/internal/utils/connlogger.go b/internal/utils/connlogger.go index d283867a3..21c99dc31 100644 --- a/internal/utils/connlogger.go +++ b/internal/utils/connlogger.go @@ -6,52 +6,62 @@ import ( ma "github.com/multiformats/go-multiaddr" ) -type connLogger struct{} +// ConnLogger is a LibP2P connection logger that logs to an Ethereum logger. +// It logs all listener/connection/stream open/close activities at debug level. +// To use one, add it on a LibP2P host swarm as a notifier, ex: +// +// connLogger := utils.NewConnLogger( +// host.Network().Notify(connLogger) +type ConnLogger struct { + l log.Logger +} -func (connLogger) Listen(net net.Network, ma ma.Multiaddr) { - log.Debug("[CONNECTIONS] Listener starting", "net", net, "addr", ma) +func (cl ConnLogger) Listen(net net.Network, ma ma.Multiaddr) { + cl.l.Debug("[CONNECTIONS] Listener starting", "net", net, "addr", ma) } -func (connLogger) ListenClose(net net.Network, ma ma.Multiaddr) { - log.Debug("[CONNECTIONS] Listener closing", "net", net, "addr", ma) +func (cl ConnLogger) ListenClose(net net.Network, ma ma.Multiaddr) { + cl.l.Debug("[CONNECTIONS] Listener closing", "net", net, "addr", ma) } -func (connLogger) Connected(net net.Network, conn net.Conn) { - log.Debug("[CONNECTIONS] Connected", "net", net, +func (cl ConnLogger) Connected(net net.Network, conn net.Conn) { + cl.l.Debug("[CONNECTIONS] Connected", "net", net, "localPeer", conn.LocalPeer(), "localAddr", conn.LocalMultiaddr(), "remotePeer", conn.RemotePeer(), "remoteAddr", conn.RemoteMultiaddr(), ) } -func (connLogger) Disconnected(net net.Network, conn net.Conn) { - log.Debug("[CONNECTIONS] Disconnected", "net", net, +func (cl ConnLogger) Disconnected(net net.Network, conn net.Conn) { + cl.l.Debug("[CONNECTIONS] Disconnected", "net", net, "localPeer", conn.LocalPeer(), "localAddr", conn.LocalMultiaddr(), "remotePeer", conn.RemotePeer(), "remoteAddr", conn.RemoteMultiaddr(), ) } -func (connLogger) OpenedStream(net net.Network, stream net.Stream) { +func (cl ConnLogger) OpenedStream(net net.Network, stream net.Stream) { conn := stream.Conn() - log.Debug("[CONNECTIONS] Stream opened", "net", net, + cl.l.Debug("[CONNECTIONS] Stream opened", "net", net, "localPeer", conn.LocalPeer(), "localAddr", conn.LocalMultiaddr(), "remotePeer", conn.RemotePeer(), "remoteAddr", conn.RemoteMultiaddr(), "protocol", stream.Protocol(), ) } -func (connLogger) ClosedStream(net net.Network, stream net.Stream) { +func (cl ConnLogger) ClosedStream(net net.Network, stream net.Stream) { conn := stream.Conn() - log.Debug("[CONNECTIONS] Stream closed", "net", net, + cl.l.Debug("[CONNECTIONS] Stream closed", "net", net, "localPeer", conn.LocalPeer(), "localAddr", conn.LocalMultiaddr(), "remotePeer", conn.RemotePeer(), "remoteAddr", conn.RemoteMultiaddr(), "protocol", stream.Protocol(), ) } -// ConnLogger is a LibP2P connection logger. -// Add on a LibP2P host by calling: -// -// host.Network().Notify(utils.ConnLogger) -// -// It logs all listener/connection/stream open/close activities at debug level. -var ConnLogger connLogger +// NewConnLogger returns a new connection logger that uses the given +// Ethereum logger. See ConnLogger for usage. +func NewConnLogger(l log.Logger) *ConnLogger { + return &ConnLogger{l: l} +} + +// RootConnLogger is a LibP2P connection logger that logs to Ethereum root +// logger. See ConnLogger for usage. +var RootConnLogger = NewConnLogger(log.Root())