We use log4net and ELMAH. ELMAH is used for anything top level or unhandled.
We log (log4net) every method. We wrote a macro to inject logging enter/exit code (although there is a product out there that will inject this instrumentation in your compiled code)
For other steps we log out debug info (loading record id 15) log.Debug(...)
other times info "processing customer JOHN' using log.Info(..)
when we catch an exception we
log.Error()
Then we deploy our application and set our logging level to debug for the first bit of time, then switching over to "info" once its running smoothly.
This provides quite a bit of detail, but its up to you to decide where. Im just saying we log details in virtually every method.
also remember when you catch exceptions and log them, do now rethrow them. IE DO NOT
throw ex;
just simply
throw;
log4net can be found here:
http://logging.apache.org/log4net/
and a nuget package is available for automatic configuration at
http://nuget.org/List/Packages/log4net
ELMAH is available via nuget as well for automatic configuration although there are extra steps you need to take to work with MVC. Check out:
How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?