How Plumbr will help you
In the screenshot above, Plumbr has exposed a java.lang.NullPointerException being thrown in the context of the login attempt via /login.do service in the email@example.com JVM. It is also visible that this is not an isolated incident, the very same NullPointerException has been impacting the login attempts 40 times during the last 24 hours.
Plumbr is also exposing the stack traces of the exceptions thrown:
java.lang.NullPointerException at com.mycompany.modelutil.Authentication.getUser(Authentication.java:367) at com.mycompany.legalarchive.model.service.SecurityService$1.doInTransaction(SecurityService.java:55) ... at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
Pay attention that the stacktraces are aggregated into a tree-like structure, covering all the different branches the particular exception was thrown from. Stacktraces occurring most frequently are ranked higher in a tree, allowing you to focus on the code with most impact to end users first.
Solving exceptions is in most cases as easy as solving the programming error triggering the exception. The particular example used in previous section just missed a single check for the principal being present in the security context.