Data FTW.
Your "contra":
- "cannot be easily integrated into the Message"
-> For your exception types, it should be easy enough to override Messageso that it does incorporate Data .. although I only would consider this if the Data is the messageData is the message.
- "loggers ignore this field and won't dump it"
Googling for Nlog as an example yields:
Exception layout renderer
(...)
format - Format of the output. Must be a comma-separated list of exception properties:
Message,Type,ShortType,ToString,Method,StackTrace&Data. This parameter value is case-insensitive. Default:message
So it seems that's easily configurable.
- requires keys and casting because values are object
Huh? Just dump the objects in there and make sure they have a usable ToString() method.
Also, I don't quite see any problem with the keys. Just use some mild uniqueness and you're good.
Disclaimer: This is what I could immediately see from the question and what I googled up on Data in 15 minutes. I thought it's mildly helpful, so I put it out as an answer, but I have never used Data myself, so it might well be that the questioner here knows way more about this than me.