proper extra handling

util.inspect makes extra a string. This leaves it as an object but discards if circular. Results in some information loss, but better than just not ever having extra. 
feels weird to throw away extra entirely, when `util.inspect` can handle things `extra = {extra: util.inspect extra}`