My log messages are too long

Hi, my logs are too verbose.

usefulness ratio of 1:118 for the token that needs to be refreshed, for example. Hitting a “require” or calling permissions in the wrong state face similar problems.

I’m glad to know that there is a problem with the refresh mechanism of my app, but in one line, not 119. How can I get the same information more succinctly?

api-1  | [WARN ]             [qtp979532928-1236505] c.n.platform.engine.api.ExceptionHandling - ... "...": [401 UNAUTHORIZED] - com.auth0.jwt.exceptions.TokenExpiredException: The Token has expired on 2025-08-26T14:23:07Z. / class ApiServerError {
api-1  |     class ApiModelError {
api-1  |         errorType: null
api-1  |         message: Unknown exception: 'The Token has expired on 2025-08-26T14:23:07Z.'
api-1  |         stackTrace: com.auth0.jwt.exceptions.TokenExpiredException: The Token has expired on 2025-08-26T14:23:07Z.
api-1  |                at com.auth0.jwt.JWTVerifier$BaseVerification.assertValidInstantClaim(JWTVerifier.java:346)
api-1  |                at com.auth0.jwt.JWTVerifier$BaseVerification.lambda$addMandatoryClaimChecks$17(JWTVerifier.java:308)
api-1  |                at com.auth0.jwt.JWTVerifier$BaseVerification$1.verify(JWTVerifier.java:405)
api-1  |                at com.auth0.jwt.JWTVerifier.verifyClaims(JWTVerifier.java:482)
api-1  |                at com.auth0.jwt.JWTVerifier.verify(JWTVerifier.java:464)
api-1  |                at com.noumenadigital.platform.authentication.TokenVerifier$verifyToken$1.invoke(TokenVerifier.kt:60)
api-1  |                at com.noumenadigital.platform.authentication.TokenVerifier$verifyToken$1.invoke(TokenVerifier.kt:36)
api-1  |                at com.noumenadigital.platform.monitoring.TimedOperationMetric$wrap$1.invoke(TimedOperationMetric.kt:29)
api-1  |                at com.noumenadigital.platform.monitoring.TimedOperationMetric.invoke$lambda$0(TimedOperationMetric.kt:20)
api-1  |                at io.prometheus.client.Summary$Child.time(Summary.java:261)
api-1  |                at com.noumenadigital.platform.monitoring.TimedOperationMetric.invoke(TimedOperationMetric.kt:20)
api-1  |                at com.noumenadigital.platform.authentication.TokenVerifier.verifyToken(TokenVerifier.kt:36)
api-1  |                at com.noumenadigital.platform.authentication.JWTAgentResolver.resolve(AgentResolver.kt:28)
api-1  |                at com.noumenadigital.platform.authentication.JWTAgentResolver.invoke(AgentResolver.kt:21)
api-1  |                at com.noumenadigital.platform.authentication.JWTAgentResolver.invoke(AgentResolver.kt:12)
api-1  |                at com.noumenadigital.platform.engine.api.NplApiRestController$processGetProtocol$1$1.invoke(NplApiRestController.kt:127)
api-1  |                at com.noumenadigital.platform.engine.api.NplApiRestController$processGetProtocol$1$1.invoke(NplApiRestController.kt:126)
api-1  |                at com.noumenadigital.platform.storage.TransactionManager.runInTransaction(Transactions.kt:19)
api-1  |                at com.noumenadigital.platform.storage.TransactionManager.read(Transactions.kt:28)
api-1  |                at com.noumenadigital.platform.engine.api.NplApiRestController$processGetProtocol$1.invoke(NplApiRestController.kt:126)
api-1  |                at com.noumenadigital.platform.engine.api.NplApiRestController$processGetProtocol$1.invoke(NplApiRestController.kt:125)
api-1  |                at com.noumenadigital.platform.monitoring.TimedOperationMetric$wrap$1.invoke(TimedOperationMetric.kt:29)
api-1  |                at com.noumenadigital.platform.monitoring.TimedOperationMetric.invoke$lambda$0(TimedOperationMetric.kt:20)
api-1  |                at io.prometheus.client.Summary$Child.time(Summary.java:261)
api-1  |                at com.noumenadigital.platform.monitoring.TimedOperationMetric.invoke(TimedOperationMetric.kt:20)
api-1  |                at com.noumenadigital.platform.engine.api.NplApiRestController.processGetProtocol(NplApiRestController.kt:125)
api-1  |                at com.noumenadigital.platform.engine.api.NplApiRestController.handleGet(NplApiRestController.kt:55)
api-1  |                at jdk.internal.reflect.GeneratedMethodAccessor332.invoke(Unknown Source)
api-1  |                at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
api-1  |                at java.base/java.lang.reflect.Method.invoke(Method.java:569)
api-1  |                at kotlin.reflect.jvm.internal.calls.CallerImpl$Method.callMethod(CallerImpl.kt:97)
api-1  |                at kotlin.reflect.jvm.internal.calls.CallerImpl$Method$Instance.call(CallerImpl.kt:113)
api-1  |                at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod$kotlin_reflection(KCallableImpl.kt:200)
api-1  |                at kotlin.reflect.jvm.internal.KCallableImpl.callBy(KCallableImpl.kt:112)
api-1  |                at org.springframework.web.method.support.InvocableHandlerMethod$KotlinDelegate.invokeFunction(InvocableHandlerMethod.java:334)
api-1  |                at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:252)
api-1  |                at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188)
api-1  |                at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
api-1  |                at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)
api-1  |                at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)
api-1  |                at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
api-1  |                at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)
api-1  |                at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
api-1  |                at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
api-1  |                at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)
api-1  |                at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:500)
api-1  |                at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
api-1  |                at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)
api-1  |                at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)
api-1  |                at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1665)
api-1  |                at org.eclipse.jetty.websocket.servlet.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:170)
api-1  |                at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
api-1  |                at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
api-1  |                at org.springframework.web.filter.AbstractRequestLoggingFilter.doFilterInternal(AbstractRequestLoggingFilter.java:289)
api-1  |                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
api-1  |                at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
api-1  |                at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
api-1  |                at com.noumenadigital.platform.engine.api.ManagementEndpointFilter.doFilter(ManagementEndpointFilter.kt:65)
api-1  |                at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
api-1  |                at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
api-1  |                at com.noumenadigital.platform.engine.api.AdminEndpointFilter.doFilter(AdminEndpointFilter.kt:62)
api-1  |                at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
api-1  |                at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
api-1  |                at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
api-1  |                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
api-1  |                at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
api-1  |                at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
api-1  |                at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
api-1  |                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
api-1  |                at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
api-1  |                at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
api-1  |                at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113)
api-1  |                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
api-1  |                at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
api-1  |                at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
api-1  |                at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
api-1  |                at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
api-1  |                at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202)
api-1  |                at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635)
api-1  |                at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:527)
api-1  |                at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131)
api-1  |                at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:598)
api-1  |                at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
api-1  |                at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223)
api-1  |                at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1580)
api-1  |                at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
api-1  |                at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1381)
api-1  |                at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
api-1  |                at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
api-1  |                at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1553)
api-1  |                at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
api-1  |                at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1303)
api-1  |                at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
api-1  |                at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
api-1  |                at org.eclipse.jetty.server.Server.handle(Server.java:563)
api-1  |                at org.eclipse.jetty.server.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1598)
api-1  |                at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:753)
api-1  |                at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:501)
api-1  |                at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:287)
api-1  |                at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
api-1  |                at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
api-1  |                at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
api-1  |                at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421)
api-1  |                at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390)
api-1  |                at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277)
api-1  |                at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:199)
api-1  |                at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411)
api-1  |                at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
api-1  |                at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
api-1  |                at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
api-1  |                at java.base/java.lang.Thread.run(Thread.java:840)
api-1  |         
api-1  |     }
api-1  | }

Hi Roger, thanks for brining this to our attention.
We have added a fix to our pre-selection, so you should see an improvement in the next few releases. We’ll keep you posted.
Cheers,
Jean

Any news on this?!

Hoping you can give me a timeline :smile: