diff --git a/p2p/net/conn/dial.go b/p2p/net/conn/dial.go index ef24cc553..820c4ec57 100644 --- a/p2p/net/conn/dial.go +++ b/p2p/net/conn/dial.go @@ -28,6 +28,7 @@ func (d *Dialer) String() string { // Example: d.DialAddr(ctx, peer.Addresses()[0], peer) func (d *Dialer) Dial(ctx context.Context, raddr ma.Multiaddr, remote peer.ID) (Conn, error) { logdial := lgbl.Dial("conn", d.LocalPeer, remote, nil, raddr) + logdial["encrypted"] = (d.PrivateKey != nil) // log wether this will be an encrypted dial or not. defer log.EventBegin(ctx, "connDial", logdial).Done() maconn, err := d.rawConnDial(ctx, raddr, remote) @@ -53,12 +54,10 @@ func (d *Dialer) Dial(ctx context.Context, raddr ma.Multiaddr, remote peer.ID) ( if d.PrivateKey == nil { log.Warning("dialer %s dialing INSECURELY %s at %s!", d, remote, raddr) - log.Event(ctx, "connDialInsecure", logdial) connOut = c return } - defer log.EventBegin(ctx, "connDialEncrypt", logdial).Done() c2, err := newSecureConn(ctx, d.PrivateKey, c) if err != nil { logdial["error"] = err diff --git a/util/eventlog/loggables/loggables.go b/util/eventlog/loggables/loggables.go index 95d52165e..77ed607f7 100644 --- a/util/eventlog/loggables/loggables.go +++ b/util/eventlog/loggables/loggables.go @@ -32,19 +32,41 @@ func Error(e error) log.Loggable { } // Dial metadata is metadata for dial events -func Dial(sys string, lid, rid peer.ID, laddr, raddr ma.Multiaddr) log.LoggableMap { - m := log.Metadata{"subsystem": sys} +func Dial(sys string, lid, rid peer.ID, laddr, raddr ma.Multiaddr) DeferredMap { + m := DeferredMap{} + m["subsystem"] = sys if lid != "" { - m["localPeer"] = lid.Pretty() + m["localPeer"] = func() interface{} { return lid.Pretty() } + _ = m["localPeer"].(func() interface{}) } if laddr != nil { - m["localAddr"] = laddr.String() + m["localAddr"] = func() interface{} { return laddr.String() } } if rid != "" { - m["remotePeer"] = rid.Pretty() + m["remotePeer"] = func() interface{} { return rid.Pretty() } } if raddr != nil { - m["remoteAddr"] = raddr.String() + m["remoteAddr"] = func() interface{} { return raddr.String() } } - return log.LoggableMap(m) + return m +} + +// DeferredMap is a Loggable which may contained deffered values. +type DeferredMap map[string]interface{} + +// Loggable describes objects that can be marshalled into Metadata for logging +func (m DeferredMap) Loggable() map[string]interface{} { + m2 := map[string]interface{}{} + for k, v := range m { + + if vf, ok := v.(func() interface{}); ok { + // if it's a DeferredVal, call it. + m2[k] = vf() + + } else { + // else use the value as is. + m2[k] = v + } + } + return m2 }