package canonicallogimport (loggingmanet)var log = logging.WithSkip(logging.Logger("canonical-log"), 1)// LogMisbehavingPeer is the canonical way to log a misbehaving peer.// Protocols should use this to identify a misbehaving peer to allow the end// user to easily identify these nodes across protocols and libp2p.func ( peer.ID, multiaddr.Multiaddr, string, error, string) {log.Warnf("CANONICAL_MISBEHAVING_PEER: peer=%s addr=%s component=%s err=%q msg=%q", , .String(), , , )}// LogMisbehavingPeerNetAddr is the canonical way to log a misbehaving peer.// Protocols should use this to identify a misbehaving peer to allow the end// user to easily identify these nodes across protocols and libp2p.func ( peer.ID, net.Addr, string, error, string) { , := manet.FromNetAddr()if != nil {log.Warnf("CANONICAL_MISBEHAVING_PEER: peer=%s net_addr=%s component=%s err=%q msg=%q", , .String(), , , )return }LogMisbehavingPeer(, , , , )}// LogPeerStatus logs any useful information about a peer. It takes in a sample// rate and will only log one in every sampleRate messages (randomly). This is// useful in surfacing events that are normal in isolation, but may be abnormal// in large quantities. For example, a successful connection from an IP address// is normal. 10,000 connections from that same IP address is not normal. libp2p// itself does nothing besides emitting this log. Hook this up to another tool// like fail2ban to action on the log.func ( int, peer.ID, multiaddr.Multiaddr, ...string) {ifrand.Intn() == 0 { := strings.Builder{}for , := range {if %2 == 0 {fmt.Fprintf(&, " %v=", ) } else {fmt.Fprintf(&, "%q", ) } }log.Infof("CANONICAL_PEER_STATUS: peer=%s addr=%s sample_rate=%v%s", , .String(), , .String()) }}
The pages are generated with Goldsv0.8.2. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.