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, <ma...@apache.org>
> > 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
>
>

Reply via email to