Merge pull request #1074 from harmony-ek/bootnode_log_conn

Add -log_conn option to bootnode
pull/1075/head
Eugene Kim 5 years ago committed by GitHub
commit bc17c1e2ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      cmd/bootnode/main.go
  2. 2
      cmd/harmony/main.go
  3. 92
      internal/utils/connlogger.go

@ -49,6 +49,7 @@ func main() {
keyFile := flag.String("key", "./.bnkey", "the private key file of the bootnode")
versionFlag := flag.Bool("version", false, "Output version info")
verbosity := flag.Int("verbosity", 5, "Logging verbosity: 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 5)")
logConn := flag.Bool("log_conn", false, "log incoming/outgoing connections")
flag.Parse()
@ -75,6 +76,10 @@ 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.NewConnLogger(utils.GetLogInstance()))
}
dataStore := dsync.MutexWrap(ds.NewMapDatastore())
dht := kaddht.NewDHT(context.Background(), host.GetP2PHost(), dataStore)

@ -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.NewConnLogger(utils.GetLogInstance()))
}
if err != nil {
panic("unable to new host in harmony")

@ -6,52 +6,72 @@ 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 netLogger(n net.Network, l log.Logger) log.Logger {
return l.New("net",
"netLocalPeer", n.LocalPeer(),
"netListenAddresses", n.ListenAddresses())
}
func (connLogger) ListenClose(net net.Network, ma ma.Multiaddr) {
log.Debug("[CONNECTIONS] Listener closing", "net", net, "addr", ma)
func connLogger(c net.Conn, l log.Logger) log.Logger {
return l.New(
"connLocalPeer", c.LocalPeer(),
"connLocalAddr", c.LocalMultiaddr(),
"connRemotePeer", c.RemotePeer(),
"connRemoteAddr", c.RemoteMultiaddr())
}
func (connLogger) Connected(net net.Network, conn net.Conn) {
log.Debug("[CONNECTIONS] Connected", "net", net,
"localPeer", conn.LocalPeer(), "localAddr", conn.LocalMultiaddr(),
"remotePeer", conn.RemotePeer(), "remoteAddr", conn.RemoteMultiaddr(),
)
func streamLogger(s net.Stream, l log.Logger) log.Logger {
return connLogger(s.Conn(), l).New("streamProtocolID", s.Protocol())
}
func (connLogger) Disconnected(net net.Network, conn net.Conn) {
log.Debug("[CONNECTIONS] Disconnected", "net", net,
"localPeer", conn.LocalPeer(), "localAddr", conn.LocalMultiaddr(),
"remotePeer", conn.RemotePeer(), "remoteAddr", conn.RemoteMultiaddr(),
)
// Listen logs a listener starting listening on an address.
func (cl ConnLogger) Listen(n net.Network, ma ma.Multiaddr) {
WithCaller(netLogger(n, cl.l)).
Debug("listener starting", "listenAddress", ma)
}
func (connLogger) OpenedStream(net net.Network, stream net.Stream) {
conn := stream.Conn()
log.Debug("[CONNECTIONS] Stream opened", "net", net,
"localPeer", conn.LocalPeer(), "localAddr", conn.LocalMultiaddr(),
"remotePeer", conn.RemotePeer(), "remoteAddr", conn.RemoteMultiaddr(),
"protocol", stream.Protocol(),
)
// ListenClose logs a listener stopping listening on an address.
func (cl ConnLogger) ListenClose(n net.Network, ma ma.Multiaddr) {
WithCaller(netLogger(n, cl.l)).
Debug("listener closing", "listenAddress", ma)
}
func (connLogger) ClosedStream(net net.Network, stream net.Stream) {
conn := stream.Conn()
log.Debug("[CONNECTIONS] Stream closed", "net", net,
"localPeer", conn.LocalPeer(), "localAddr", conn.LocalMultiaddr(),
"remotePeer", conn.RemotePeer(), "remoteAddr", conn.RemoteMultiaddr(),
"protocol", stream.Protocol(),
)
// Connected logs a connection getting opened.
func (cl ConnLogger) Connected(n net.Network, c net.Conn) {
WithCaller(connLogger(c, netLogger(n, cl.l))).Debug("connected")
}
// 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
// Disconnected logs a connection getting closed.
func (cl ConnLogger) Disconnected(n net.Network, c net.Conn) {
WithCaller(connLogger(c, netLogger(n, cl.l))).Debug("disconnected")
}
// OpenedStream logs a new stream getting opened.
func (cl ConnLogger) OpenedStream(n net.Network, s net.Stream) {
WithCaller(streamLogger(s, netLogger(n, cl.l))).Debug("stream opened")
}
// ClosedStream logs a stream getting closed.
func (cl ConnLogger) ClosedStream(n net.Network, s net.Stream) {
WithCaller(streamLogger(s, netLogger(n, cl.l))).Debug("stream closed")
}
// 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())

Loading…
Cancel
Save