When Tomcat starts up, both System.out and System.err are redirected to the same PrintStream, an instance of o.a.tomcat.util.log.SystemLogHandler, which itself wraps System.out This happens quite early in o.a.c.startup.Catalina.load() From then onwards no distinguish can be made between System.out.print()'s and System.err.print()'s. The original 'System'-Error-Stream is lost. Specifically when starting Tomcat within Eclipse (while developing/debugging a Web-App), then the nice 'red' printed error-Stream instead of the 'blue' printed stdout-stream is useless.
if you wish - create a listener which changes calls the appropriate System.setXXX calls with your own stream handlers.
*** This bug has been marked as a duplicate of bug 18462 ***