HttpError is a way to signal an issue to the client, it does not generally imply a programming error or failure on the server side (at least for status codes < 500). Thus, writing it to "the exception log" with wfDebugLog( 'exception', ... ) is misleading.
I suggest the following behavior:
- HttpError::isLoggable should return false if $this->httpCode < 500.
- HttpError::report should write to the web server error log (via wfLogWarning or error_log) if $this->httpCode >= 400
Alternatively, MWExceptionHandler::logException could implement a special case for HttpError, using a different log stream, i.e. "http-error" instead of the generic "exception" log. To avoid the special case in MWExceptionHandler, MWException could get a getLogStream() method that would return "exception" per default.