func Marshal(prefix string, v interface{}, setField func(key string, value interface{}))
Marshal is a helper that checks if the interface provided
implements Marshaler. If it does, it recursively calls MarshalLog
building up the prefixes long (combining them with ".").
Set writes the field value into F. If the value implements
interface { MarshalRoot() log.Marshaler } then it marshals it
from the root level. If the value is a
log.Marshaler, it recursively marshals that value into F.