logging assembly discovery

#1562
I don't understand the pattern here:
1). Why is any of this lazy or cached? If we're already writing values why do we care about the allocations?
2). Why is `Values` a stateful public property? It seems like the right contract is to call `GetValues()`