System.out ist ein Objekt einer Streamunterart namens PrintStream
(oder einer unbekannten Unterart davon.
Erbt aber jedenfalls von Printstream und hat alle Methoden, die der auch hat).
Was der PrintStream (mehr) kann als Bytearrays schreiben
sind eben diese print- und println-Methoden, die Zeilenweise Text(-dateien) schreiben
und nicht nur rohe Bytes, sondern Strings, ints usw. nehmen.
Als "Ziel" nimmt der Printstream beim Erzeugen einen beliebigen anderen Outputstream.
Seine Hauptaufgabe ist also nicht wirklich das Schreiben,
sondern die Umwandlung der ganzen bequem geprinteten Sachen in Bytearrays.
Die werden dann an den Zielstream weitergegeben, das kann dann zB. ein FileOutputStream sein.
(Alternativ kann man dem Printstream auch gleich einen Dateinamen geben
und der macht sich drinnen selbst einen FileOutputStream. Nett.
Die Andere-Stream-Methode bleibt trotzdem wichtig, es gibt ja nicht nur Dateien).
...
Du willst jetzt also alle/manche System.out-Beschreibungen wo anders hinleiten.
Ob man System.out direkt ändern kann weiß ich gar nicht,
würde es besser auch nicht ausprobieren.
Alternative:
Mach eine eigene PrintStream-Variable,
der du je nach Bedarf System.out zuweist oder einen neuen Stream Richtung Datei reinerzeugst.
Die Schreibbefehle machst du dann alle auf diesen Stream.
Java:
PrintStream ausgabe;
ausgabe = System.out;
//oder
ausgabe = new PrintStream(...);
ausgabe.println("Hallo Welt");