As we build infrastructure components that support a large user base, it becomes critical to be able to provide quick support to end users. A large chunk of support issues simply arise due to end users encountering an error that they are clueless about. E.g. an HTTP 500 error with a generic "failed to do " message leads the user to a dead end and causes frustration.
Apart from clear messaging to the end user, it's also important to provide maximum visibility into error logs, so that someone who is looking at the logs should be able to determine – even without being familiar with the system – whether the cause of the error is internal or external. This is extremely critical in high utilisation network applications because usually the source of error is an external failure rather than a code bug.
As an example of very poor logging, the other day I logged into a service backend hoping to find some trace of user reported issues in the error logs. After filtering out all