We have a huge (old legacy java) code-base, where many files (around 5k) have System.out.println\'s. We are planning to remove them for cleanup/performance reasons. How can
You could use a conditional compilation to have a debug build with the print statements and a release build without them.
Basically, the idea is to create a final static class with a final static boolean that you use as a switch at compile time.
public final class Debug {
//set to false to allow compiler to identify and eliminate
//unreachable code
public static final boolean ON = true;
}
Then you can just replace all of your System.out.println
statements with
if(Debug.ON)
{
System.out.println...
}
Since the compiler will ignore any unreachable branches of code, you can just set ON = false
when you do a release build and the print statements will be excluded from your bytecode.
Note: This doesn't deal with the case that Oscar pointed out, where a print statement may change the state of some object. You could use conditional compilation to print to a null object when in release mode, as he suggested, instead of removing the prints altogether.