What I would like to do is record not redirect java System.out and System.err. I want to be able to save everything that is printed out, while still having it actually print to the console/default destination. I can't change the runtime. I need it to do this in the Java process, seeing as it will be in a Bukkit plugin. Thanks!
You can save the original values of System.out and System.err, extend PrintStream to create a class that records the output and forwards it to another PrintStream.
Then you can just do
System.setOut(new RecordingStream(System.out));
System.setErr(new RecordingStream(System.err));