I built a logging system that reports directly into my bug database, and it reports the following information:
- Non-identifiable information about the computer and runtime environment (like windows version, some regionale settings, amount of memory, cpu-type, etc.)
- Stack-trace and information about the exception itself
- Loaded assemblies, version numbers
- Loaded dll's that aren't assemblies (you newer know when a dll injected by Skype to handle hot-key invocation might mess up your own program)
A form pops up first where the user can review everything that is to be sent, and can optionally identify him/herself + write a description what he/she was doing when the problem occured. If an email is provided, the user will get an email back to track the bug report with.
You should strive to make the process of logging as non-intrusive as possible, and detailed enough that you can at least determine where to start looking.
I'm currently building a logging system that can be enabled for users that experience the same problem multiple times, where the last N items of the log can be attached to the bug report, which contains things like code flow (method calls, returns, exceptions, etc.).