I have some libraries that are calling System.out.println on me, I'd like to redirect them through log4j or commons logging. But in particular I'd like to keep the fully-qualified-classname so I know what component generated the logs.
Is there a nice, orderly way to accomplish this?
UPDATE: After accomplishing this I posted the code here:
http://www.bukisa.com/articles/487009_java-how-to-redirect-stderr-and-stdout-to-commons-logging-with-the-calling-class
The only way I can think of would be to write your own
PrintStream
implementation which created a stack trace when theprintln
method was called, in order to work out the class name. It would be pretty horrible, but it should work... proof of concept sample code:(In your code you would make it log to log4j instead of course... or possibly as well.)
If you can modify the source code, then have a look at the Eclipse Plugin Log4E. It provides a function to convert System.out.println into logger statements (and many other cool stuff dealing with logging).