I would do something like the following:
typdef enum OUTPUTS { SERIAL, SERIAL1, SERIAL2, SERIAL3 } outputs_e;
class Writer: public Stream
{
public:
void println(char*, outputs_e);
}
void Writer::println(char * data, outputs_e outputTo)
{
if(outputTo & SERIAL) Serial.println(data);
if(outputTo & SERIAL1) Serial1.println(data);
if(outputTo & SERIAL2) Serial2.println(data);
if(outputTo & SERIAL3) Serial3.println(data);
}
Now, in your code you simply do the following:
Writer writer;
writer.println("Some output", SERIAL | SERIAL1); // goes to both
writer.println("Some other output", SERIAL); // goes to Serial only
writer.println("Yet another output", SERIAL1); // goes to Serial1 only
Now you have a repeatable pattern that you can let be programmatically controlled:
if(somecondition) outputs = SERIAL;
else if(someothercondition) outputs = SERIAL | SERIAL1;
writer.println("Display me!", outputs);