It looks like AbstractRemoteServiceServlet's doUnexpectedFailure method is protected and non-final - it definitely looks appropriate here to override that and follow the same steps. You could also log and then delegate to super.doUnexpectedFailure if you're concerned about changes happening in AbstractRemoteServiceServlet. Such changes are pretty unlikely though - the callsite for that method (in doPost()) explicitly says that doUnexpectedFailure exists to "give a subclass a change to either handle the exception or rethrow it".
Note also that it is totally appropriate to not call super and implement your own logic, as long as you somehow signal failure back to the client. RPCServletUtils.writeResponseForUnexpectedFailure is going to just send back a generic 500 since this is after all an unexpected failure and one that can't take the normal approach of telling the client what happened.
The last link you posted implies that you're using tomcat, is that correct? It seems like this is more of a tomcat configuration problem then - could be worth tracking down in general, rather than hoping no other servlet library uses servlet apis for logging?
Finally, please note that this is not the only way that GWT-RPC is going to call context.log() - see RPCServletUtils.writeResponse for example.