Why does `logger.error` use `user.getUserId()` while the exception message uses `user(.toString())`? Is the exception message eventually displayed to the user?

Nitpick: if these two messages can be the same, it might be better to create the string once and pass it to both.