diff --git a/grpc/prpc/encoding.go b/grpc/prpc/encoding.go
index <HASH>..<HASH> 100644
--- a/grpc/prpc/encoding.go
+++ b/grpc/prpc/encoding.go
@@ -198,13 +198,16 @@ func writeError(c context.Context, w http.ResponseWriter, err error, format Form
 	}
 
 	body := st.Message()
-	level := logging.Warning
-	if httpStatus >= 500 {
-		level = logging.Error
+	if httpStatus < 500 {
+		logging.Warningf(c, "prpc: responding with %s error: %s", st.Code(), st.Message())
+	} else {
 		// Hide potential implementation details from the user.
 		body = http.StatusText(httpStatus)
+
+		// Log everything about the error.
+		logging.Errorf(c, "prpc: responding with %s error: %s", st.Code(), st.Message())
+		errors.Log(c, err)
 	}
-	logging.Logf(c, level, "prpc: responding with %s error: %s", st.Code(), st.Message())
 
 	w.Header().Set(HeaderGRPCCode, strconv.Itoa(int(st.Code())))
 	w.Header().Set(headerContentType, "text/plain")
[prpc] Log internal errors completely

If an RPC method implementation returned an internal error, log
the call stack.

Bug: <I>
Change-Id: I2c7f<I>d3d<I>d<I>f<I>bf<I>ce<I>ac<I>cccc8
Reviewed-on: <URL>