Re: What's the purpose of this code, that logs a seemingly meaningless and possibly misleading exception?
-BEGIN PGP SIGNED MESSAGE- Hash: SHA256 Behrang, On 10/26/19 20:22, Behrang Saeedzadeh wrote: > Hi Chris, > > I suggested “massaging” it a bit before using the output: > > stack trace into a StringWriter via a PrintWriter, massage it a > bit > > For example: > > StringWriter sw = new StringWriter(); PrintWriter pw = new > PrintWriter(sw); Exception e = new Exception(); pw.append("Current > stack trace:\n");for (StackTraceElement stackTraceElement : > e.getStackTrace()) { pw.append("\tat > ").append(stackTraceElement.toString()).append("\n"); } > > System.out.println(sw.toString()); > > Which will produce: > > Current stack trace: at > com.example.demo.DemoApplication.baz(DemoApplication.java:33) at > com.example.demo.DemoApplication.foo(DemoApplication.java:20) at > com.example.demo.DemoApplication.main(DemoApplication.java:15) Other than writing to stdout, how is that any different from the behavior of logger.debug("message", e) ? Are you just trying to get rid of the "java.lang.Exception: message" part of the output? I just don't understand how this is an improvement over what is already there. - -chris > On Sun, Oct 27, 2019 at 7:48 AM Christopher Schultz < > ch...@christopherschultz.net> wrote: > > Behrang, > > On 10/26/19 07:01, Behrang Saeedzadeh wrote: I think so. Another option is to create an exception and print the stack trace into a StringWriter via a PrintWriter, massage it a bit if necessary and add that to the log message. > > ... which would produce the same output? > > What's the goal of the change? > > -chris > On Sat, 26 Oct. 2019, 9:12 pm Mark Thomas, wrote: > On October 25, 2019 9:27:21 AM UTC, Behrang Saeedzadeh < > behran...@gmail.com> wrote: >> From Tomcat Embedded Core 9.0.26: >> >> @Override protected void doClose() { if >> (log.isDebugEnabled()) { log.debug("Calling [" + >> getEndpoint() + "].closeSocket([" + this + "])", new >> Exception()); } >> >> Which will log something like: >> >> DEBUG [http-nio-8080-exec-2] >> org.apache.tomcat.util.net.NioEndpoint Calling >> [org.apache.tomcat.util.net.NioEndpoint@654c1a54 > >> ].closeSocket([org.apache.tomcat.util.net.NioEndpoint$NioSocketWr app > >> er@39e9d240 >> >> > :org.apache.tomcat.util.net.NioChannel@78019ed5 > :java.nio.channels.SocketChannel[connected >> local=/127.0.0.1:8080 remote=/127.0.0.1:39988]]) >> >> java.lang.Exception: null at org.apache.tomcat.util.net > .NioEndpoint$NioSocketWrapper.doClose(NioEndpoint.java:1165) >> > [tomcat-embed-core-9.0.26.jar:9.0.26] at >> org.apache.tomcat.util.net > .SocketWrapperBase.close(SocketWrapperBase.java:394) >> [tomcat-embed-core-9.0.26.jar:9.0.26] at >> org.apache.tomcat.util.net > .NioEndpoint$Poller.cancelledKey(NioEndpoint.java:667) >> [tomcat-embed-core-9.0.26.jar:9.0.26] at >> org.apache.tomcat.util.net > .NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1592) >> [tomcat-embed-core-9.0.26.jar:9.0.26] at >> org.apache.tomcat.util.net > .SocketProcessorBase.run(SocketProcessorBase.java:49) >> [tomcat-embed-core-9.0.26.jar:9.0.26] at > >> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecu tor > >> .java:1149) >> >> > [na:1.8.0_212] >> at > >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExec uto > >> r.java:624) >> >> > [na:1.8.0_212] >> at > >> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(Ta skT > >> hread.java:61) >> >> > [tomcat-embed-core-9.0.26.jar:9.0.26] >> at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212] >> >> To print the stack trace next to the message? > > Yes. So the debug message shows what called close(). > >> Every time I turn on debug logging this exception catches >> me by surprise. Why not only print the stack trace next >> using >> org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace >> >> for example? > > Because that adds an entire library as a dependency to > support a single debug message. And new Exception() gives > what we need without that dependency. Would adding a > message to the exception such as "Tracing caller" make > things clearer? > > Mark > > -- - --- > > > > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: > users-h...@tomcat.apache.org > > >> >> - >> >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >> For additional commands, e-mail: users-h...@tomcat.apache.org >> >> > -BEGIN PGP SIGNATURE- Comment: Using GnuPG with Thunderbird -
Re: What's the purpose of this code, that logs a seemingly meaningless and possibly misleading exception?
Hi Chris, I suggested “massaging” it a bit before using the output: stack trace into a StringWriter via a PrintWriter, massage it a bit For example: StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); Exception e = new Exception(); pw.append("Current stack trace:\n");for (StackTraceElement stackTraceElement : e.getStackTrace()) { pw.append("\tat ").append(stackTraceElement.toString()).append("\n"); } System.out.println(sw.toString()); Which will produce: Current stack trace: at com.example.demo.DemoApplication.baz(DemoApplication.java:33) at com.example.demo.DemoApplication.foo(DemoApplication.java:20) at com.example.demo.DemoApplication.main(DemoApplication.java:15) When Tomcat’s minimum required Java runtime version becomes 9 that can be replaced with StackWalker. Best regards, Behrang Saeedzadeh blog.behrang.org On Sun, Oct 27, 2019 at 7:48 AM Christopher Schultz < ch...@christopherschultz.net> wrote: > -BEGIN PGP SIGNED MESSAGE- > Hash: SHA256 > > Behrang, > > On 10/26/19 07:01, Behrang Saeedzadeh wrote: > > I think so. Another option is to create an exception and print the > > stack trace into a StringWriter via a PrintWriter, massage it a bit > > if necessary and add that to the log message. > > ... which would produce the same output? > > What's the goal of the change? > > - -chris > > > On Sat, 26 Oct. 2019, 9:12 pm Mark Thomas, > > wrote: > > > >> On October 25, 2019 9:27:21 AM UTC, Behrang Saeedzadeh < > >> behran...@gmail.com> wrote: > >>> From Tomcat Embedded Core 9.0.26: > >>> > >>> @Override protected void doClose() { if (log.isDebugEnabled()) > >>> { log.debug("Calling [" + getEndpoint() + "].closeSocket([" + > >>> this + "])", new Exception()); } > >>> > >>> Which will log something like: > >>> > >>> DEBUG [http-nio-8080-exec-2] > >>> org.apache.tomcat.util.net.NioEndpoint Calling > >>> [org.apache.tomcat.util.net.NioEndpoint@654c1a54 > >> > >>> ].closeSocket([org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapp > er@39e9d240 > >>> > >>> > :org.apache.tomcat.util.net.NioChannel@78019ed5 > >> :java.nio.channels.SocketChannel[connected > >>> local=/127.0.0.1:8080 remote=/127.0.0.1:39988]]) > >>> > >>> java.lang.Exception: null at org.apache.tomcat.util.net > >> .NioEndpoint$NioSocketWrapper.doClose(NioEndpoint.java:1165) > >>> [tomcat-embed-core-9.0.26.jar:9.0.26] at > >>> org.apache.tomcat.util.net > >> .SocketWrapperBase.close(SocketWrapperBase.java:394) > >>> [tomcat-embed-core-9.0.26.jar:9.0.26] at > >>> org.apache.tomcat.util.net > >> .NioEndpoint$Poller.cancelledKey(NioEndpoint.java:667) > >>> [tomcat-embed-core-9.0.26.jar:9.0.26] at > >>> org.apache.tomcat.util.net > >> .NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1592) > >>> [tomcat-embed-core-9.0.26.jar:9.0.26] at > >>> org.apache.tomcat.util.net > >> .SocketProcessorBase.run(SocketProcessorBase.java:49) > >>> [tomcat-embed-core-9.0.26.jar:9.0.26] at > >> > >>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor > .java:1149) > >>> > >>> > [na:1.8.0_212] > >>> at > >> > >>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecuto > r.java:624) > >>> > >>> > [na:1.8.0_212] > >>> at > >> > >>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskT > hread.java:61) > >>> > >>> > [tomcat-embed-core-9.0.26.jar:9.0.26] > >>> at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212] > >>> > >>> To print the stack trace next to the message? > >> > >> Yes. So the debug message shows what called close(). > >> > >>> Every time I turn on debug logging this exception catches me by > >>> surprise. Why not only print the stack trace next using > >>> org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace > >>> for example? > >> > >> Because that adds an entire library as a dependency to support a > >> single debug message. And new Exception() gives what we need > >> without that dependency. Would adding a message to the exception > >> such as "Tracing caller" make things clearer? > >> > >> Mark > >> > >> - > >> > >> > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > >> For additional commands, e-mail: users-h...@tomcat.apache.org > >> > >> > > > -BEGIN PGP SIGNATURE- > Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/ > > iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAl20sRQACgkQHPApP6U8 > pFjIUhAAnPUFDK1fvi/4LL7hWGThpli/VkHaII3VisokqjjnGLxPAJyzUFy+Gvza > vjnq1WIYJWQc6r0a8j6FwAvjNVVtJ4WJMP3ANVe154h3RN2Su6q8PMVyZIRE21vY > kNg3UBcBYsJlAEwd0D7X6jsM2uUIinAmEVLqeNTIJWeo7YpmA1F+txn3Q4BDaO0o > hQ/i2hfk+d+M6upfmdVV1KW5Me+lwXRdVVMn3cxzxGEUEAXzPanp3tNXVVet4G7Q > 7erzyxZ0tdxpUl4JbkVHm6mXEykPjsGXNPXLjBbghByI6+M2u1/DQl4maVkRY6g3 > SX/19vfmn60Fgq1XuaKaAepjWTPEUcd6V35U7Pr3f7Dzl6zUG4QsGdCMtQO4YHAJ > dK3z/CCADudv3xDHqMUJzagB3SUGc86FSYMAslAt6wlYB/5xY9hcF+LApRj5IIEM > VFN2NEH4g5ehXZMXjULDQzzggW91LUXCD0gHN4b0t1/gcovBVAbcNLbFXCaPIGBj >
Re: What's the purpose of this code, that logs a seemingly meaningless and possibly misleading exception?
-BEGIN PGP SIGNED MESSAGE- Hash: SHA256 Behrang, On 10/26/19 07:01, Behrang Saeedzadeh wrote: > I think so. Another option is to create an exception and print the > stack trace into a StringWriter via a PrintWriter, massage it a bit > if necessary and add that to the log message. ... which would produce the same output? What's the goal of the change? - -chris > On Sat, 26 Oct. 2019, 9:12 pm Mark Thomas, > wrote: > >> On October 25, 2019 9:27:21 AM UTC, Behrang Saeedzadeh < >> behran...@gmail.com> wrote: >>> From Tomcat Embedded Core 9.0.26: >>> >>> @Override protected void doClose() { if (log.isDebugEnabled()) >>> { log.debug("Calling [" + getEndpoint() + "].closeSocket([" + >>> this + "])", new Exception()); } >>> >>> Which will log something like: >>> >>> DEBUG [http-nio-8080-exec-2] >>> org.apache.tomcat.util.net.NioEndpoint Calling >>> [org.apache.tomcat.util.net.NioEndpoint@654c1a54 >> >>> ].closeSocket([org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapp er@39e9d240 >>> >>> :org.apache.tomcat.util.net.NioChannel@78019ed5 >> :java.nio.channels.SocketChannel[connected >>> local=/127.0.0.1:8080 remote=/127.0.0.1:39988]]) >>> >>> java.lang.Exception: null at org.apache.tomcat.util.net >> .NioEndpoint$NioSocketWrapper.doClose(NioEndpoint.java:1165) >>> [tomcat-embed-core-9.0.26.jar:9.0.26] at >>> org.apache.tomcat.util.net >> .SocketWrapperBase.close(SocketWrapperBase.java:394) >>> [tomcat-embed-core-9.0.26.jar:9.0.26] at >>> org.apache.tomcat.util.net >> .NioEndpoint$Poller.cancelledKey(NioEndpoint.java:667) >>> [tomcat-embed-core-9.0.26.jar:9.0.26] at >>> org.apache.tomcat.util.net >> .NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1592) >>> [tomcat-embed-core-9.0.26.jar:9.0.26] at >>> org.apache.tomcat.util.net >> .SocketProcessorBase.run(SocketProcessorBase.java:49) >>> [tomcat-embed-core-9.0.26.jar:9.0.26] at >> >>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor .java:1149) >>> >>> [na:1.8.0_212] >>> at >> >>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecuto r.java:624) >>> >>> [na:1.8.0_212] >>> at >> >>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskT hread.java:61) >>> >>> [tomcat-embed-core-9.0.26.jar:9.0.26] >>> at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212] >>> >>> To print the stack trace next to the message? >> >> Yes. So the debug message shows what called close(). >> >>> Every time I turn on debug logging this exception catches me by >>> surprise. Why not only print the stack trace next using >>> org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace >>> for example? >> >> Because that adds an entire library as a dependency to support a >> single debug message. And new Exception() gives what we need >> without that dependency. Would adding a message to the exception >> such as "Tracing caller" make things clearer? >> >> Mark >> >> - >> >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >> For additional commands, e-mail: users-h...@tomcat.apache.org >> >> > -BEGIN PGP SIGNATURE- Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/ iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAl20sRQACgkQHPApP6U8 pFjIUhAAnPUFDK1fvi/4LL7hWGThpli/VkHaII3VisokqjjnGLxPAJyzUFy+Gvza vjnq1WIYJWQc6r0a8j6FwAvjNVVtJ4WJMP3ANVe154h3RN2Su6q8PMVyZIRE21vY kNg3UBcBYsJlAEwd0D7X6jsM2uUIinAmEVLqeNTIJWeo7YpmA1F+txn3Q4BDaO0o hQ/i2hfk+d+M6upfmdVV1KW5Me+lwXRdVVMn3cxzxGEUEAXzPanp3tNXVVet4G7Q 7erzyxZ0tdxpUl4JbkVHm6mXEykPjsGXNPXLjBbghByI6+M2u1/DQl4maVkRY6g3 SX/19vfmn60Fgq1XuaKaAepjWTPEUcd6V35U7Pr3f7Dzl6zUG4QsGdCMtQO4YHAJ dK3z/CCADudv3xDHqMUJzagB3SUGc86FSYMAslAt6wlYB/5xY9hcF+LApRj5IIEM VFN2NEH4g5ehXZMXjULDQzzggW91LUXCD0gHN4b0t1/gcovBVAbcNLbFXCaPIGBj Nv7RG546A050ej7ZemUr7dZTshrJHo2OEq16XcxGaeY9e208rXlUlFfyytHFyArv ieJI0IN/0iBHOB2nRKdeiB62pdGAU0E2uL64BL6CibCItR/rlhJQsih271z0v3Sd M3xdScWJDJ4oKGoxlpdqO65NRC9phTlXnqxWmO4YDPVyqKKHL3E= =csbh -END PGP SIGNATURE- - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
Re: What's the purpose of this code, that logs a seemingly meaningless and possibly misleading exception?
I think so. Another option is to create an exception and print the stack trace into a StringWriter via a PrintWriter, massage it a bit if necessary and add that to the log message. On Sat, 26 Oct. 2019, 9:12 pm Mark Thomas, wrote: > On October 25, 2019 9:27:21 AM UTC, Behrang Saeedzadeh < > behran...@gmail.com> wrote: > >From Tomcat Embedded Core 9.0.26: > > > >@Override > >protected void doClose() { > >if (log.isDebugEnabled()) { > >log.debug("Calling [" + getEndpoint() + "].closeSocket([" + > >this + "])", new Exception()); > >} > > > >Which will log something like: > > > >DEBUG [http-nio-8080-exec-2] > >org.apache.tomcat.util.net.NioEndpoint > >Calling [org.apache.tomcat.util.net.NioEndpoint@654c1a54 > > >].closeSocket([org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@39e9d240 > >:org.apache.tomcat.util.net.NioChannel@78019ed5 > :java.nio.channels.SocketChannel[connected > >local=/127.0.0.1:8080 remote=/127.0.0.1:39988]]) > > > >java.lang.Exception: null > >at > >org.apache.tomcat.util.net > .NioEndpoint$NioSocketWrapper.doClose(NioEndpoint.java:1165) > >[tomcat-embed-core-9.0.26.jar:9.0.26] > >at > >org.apache.tomcat.util.net > .SocketWrapperBase.close(SocketWrapperBase.java:394) > >[tomcat-embed-core-9.0.26.jar:9.0.26] > >at > >org.apache.tomcat.util.net > .NioEndpoint$Poller.cancelledKey(NioEndpoint.java:667) > >[tomcat-embed-core-9.0.26.jar:9.0.26] > >at > >org.apache.tomcat.util.net > .NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1592) > >[tomcat-embed-core-9.0.26.jar:9.0.26] > >at > >org.apache.tomcat.util.net > .SocketProcessorBase.run(SocketProcessorBase.java:49) > >[tomcat-embed-core-9.0.26.jar:9.0.26] > >at > > >java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > >[na:1.8.0_212] > >at > > >java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > >[na:1.8.0_212] > >at > > >org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) > >[tomcat-embed-core-9.0.26.jar:9.0.26] > >at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212] > > > >To print the stack trace next to the message? > > Yes. So the debug message shows what called close(). > > > Every time I turn on > >debug > >logging this exception catches me by surprise. Why not only print the > >stack > >trace next using > >org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace for > >example? > > Because that adds an entire library as a dependency to support a single > debug message. And new Exception() gives what we need without that > dependency. Would adding a message to the exception such as "Tracing > caller" make things clearer? > > Mark > > - > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > >
Re: What's the purpose of this code, that logs a seemingly meaningless and possibly misleading exception?
On October 25, 2019 9:27:21 AM UTC, Behrang Saeedzadeh wrote: >From Tomcat Embedded Core 9.0.26: > >@Override >protected void doClose() { >if (log.isDebugEnabled()) { >log.debug("Calling [" + getEndpoint() + "].closeSocket([" + >this + "])", new Exception()); >} > >Which will log something like: > >DEBUG [http-nio-8080-exec-2] >org.apache.tomcat.util.net.NioEndpoint >Calling [org.apache.tomcat.util.net.NioEndpoint@654c1a54 >].closeSocket([org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@39e9d240 >:org.apache.tomcat.util.net.NioChannel@78019ed5:java.nio.channels.SocketChannel[connected >local=/127.0.0.1:8080 remote=/127.0.0.1:39988]]) > >java.lang.Exception: null >at >org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doClose(NioEndpoint.java:1165) >[tomcat-embed-core-9.0.26.jar:9.0.26] >at >org.apache.tomcat.util.net.SocketWrapperBase.close(SocketWrapperBase.java:394) >[tomcat-embed-core-9.0.26.jar:9.0.26] >at >org.apache.tomcat.util.net.NioEndpoint$Poller.cancelledKey(NioEndpoint.java:667) >[tomcat-embed-core-9.0.26.jar:9.0.26] >at >org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1592) >[tomcat-embed-core-9.0.26.jar:9.0.26] >at >org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) >[tomcat-embed-core-9.0.26.jar:9.0.26] >at >java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) >[na:1.8.0_212] >at >java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) >[na:1.8.0_212] >at >org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) >[tomcat-embed-core-9.0.26.jar:9.0.26] >at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212] > >To print the stack trace next to the message? Yes. So the debug message shows what called close(). > Every time I turn on >debug >logging this exception catches me by surprise. Why not only print the >stack >trace next using >org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace for >example? Because that adds an entire library as a dependency to support a single debug message. And new Exception() gives what we need without that dependency. Would adding a message to the exception such as "Tracing caller" make things clearer? Mark - To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org
What's the purpose of this code, that logs a seemingly meaningless and possibly misleading exception?
>From Tomcat Embedded Core 9.0.26: @Override protected void doClose() { if (log.isDebugEnabled()) { log.debug("Calling [" + getEndpoint() + "].closeSocket([" + this + "])", new Exception()); } Which will log something like: DEBUG [http-nio-8080-exec-2] org.apache.tomcat.util.net.NioEndpoint Calling [org.apache.tomcat.util.net.NioEndpoint@654c1a54 ].closeSocket([org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@39e9d240 :org.apache.tomcat.util.net.NioChannel@78019ed5:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:39988]]) java.lang.Exception: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doClose(NioEndpoint.java:1165) [tomcat-embed-core-9.0.26.jar:9.0.26] at org.apache.tomcat.util.net.SocketWrapperBase.close(SocketWrapperBase.java:394) [tomcat-embed-core-9.0.26.jar:9.0.26] at org.apache.tomcat.util.net.NioEndpoint$Poller.cancelledKey(NioEndpoint.java:667) [tomcat-embed-core-9.0.26.jar:9.0.26] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1592) [tomcat-embed-core-9.0.26.jar:9.0.26] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.26.jar:9.0.26] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_212] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_212] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.26.jar:9.0.26] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212] To print the stack trace next to the message? Every time I turn on debug logging this exception catches me by surprise. Why not only print the stack trace next using org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace for example? Best regards, Behrang Saeedzadeh blog.behrang.org