|
|
|
package utils
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/ethereum/go-ethereum/log"
|
|
|
|
net "github.com/libp2p/go-libp2p-net"
|
|
|
|
ma "github.com/multiformats/go-multiaddr"
|
|
|
|
)
|
|
|
|
|
|
|
|
// 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 netLogger(n net.Network, l log.Logger) log.Logger {
|
|
|
|
return l.New("net", n)
|
|
|
|
}
|
|
|
|
|
|
|
|
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 (cl ConnLogger) Listen(n net.Network, ma ma.Multiaddr) {
|
|
|
|
WithCaller(netLogger(n, cl.l)).Debug("listener starting", "addr", ma)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cl ConnLogger) ListenClose(n net.Network, ma ma.Multiaddr) {
|
|
|
|
WithCaller(netLogger(n, cl.l)).Debug("listener closing", "addr", ma)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cl ConnLogger) Connected(n net.Network, c net.Conn) {
|
|
|
|
WithCaller(connLogger(c, netLogger(n, cl.l))).Debug("connected")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cl ConnLogger) Disconnected(n net.Network, c net.Conn) {
|
|
|
|
WithCaller(connLogger(c, netLogger(n, cl.l))).Debug("disconnected")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cl ConnLogger) OpenedStream(n net.Network, s net.Stream) {
|
|
|
|
conn := s.Conn()
|
|
|
|
WithCaller(netLogger(n, cl.l)).Debug("stream opened",
|
|
|
|
"localPeer", conn.LocalPeer(), "localAddr", conn.LocalMultiaddr(),
|
|
|
|
"remotePeer", conn.RemotePeer(), "remoteAddr", conn.RemoteMultiaddr(),
|
|
|
|
"protocol", s.Protocol(),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (cl ConnLogger) ClosedStream(n net.Network, s net.Stream) {
|
|
|
|
conn := s.Conn()
|
|
|
|
WithCaller(netLogger(n, cl.l)).Debug("stream closed",
|
|
|
|
"localPeer", conn.LocalPeer(), "localAddr", conn.LocalMultiaddr(),
|
|
|
|
"remotePeer", conn.RemotePeer(), "remoteAddr", conn.RemoteMultiaddr(),
|
|
|
|
"protocol", s.Protocol(),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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())
|