More effecient datalogging code Background:
I am using a Teensy 3.6 to data log over a dozen sensors. I am printing to Serial1 for local Serial access, Serial3 for remote access (via xbee, same data is on Serial1 as on Serail3, just different physical connection) as well as datalog to SDCard (CSV format). My code is expanding and is incredibly repetitive, and I am looking for a more efficient way of writing the following. I am trying to move a lot of the rest of my code to classes using this and this tutorial, but I'm not sure this is the best option for the datalogging as there are many more strings in this portion.
The variables we are dealing with:

Live sensor value (eOilTempF)
A visual flag for if the sensor is out of bounds (checkEngine)
A auditory alarm if it's further out of bounds (eOilTempAlarm)
The max value we've recorded (engineOilStats.maximum())
The minimum value (engineOilStats.minimum())

As well as all the little bits to make it attractive and human readable for the Serial stuff.
Code:
Local serial:
Serial.print(&quot;Engine Oil Temp:\t&quot;);
Serial.print(eOilTempF);
Serial.print(&quot;F\t   &quot;);
Serial.print(&quot;Flag: &quot;);
Serial.print(checkEngine);
Serial.print(&quot;\t Alarm:&quot;);
Serial.print(eOilTempAlarm);
Serial.print(&quot;\tMAX: &quot;);
Serial.print(engineOilStats.maximum());
Serial.print(&quot; F&quot;);
Serial.print(&quot;\t\t\t\tAVG: &quot;);
Serial.print(engineOilStats.average());
Serial.println(&quot; F&quot;);

Xbee serial:
Serial3.print(&quot;Engine Oil Temp:\t&quot;);
Serial3.print(eOilTempF);
Serial3.print(&quot;F\t   &quot;);
Serial3.print(&quot;Flag: &quot;);
Serial3.print(checkEngine);
Serial3.print(&quot;\t Alarm:&quot;);
Serial3.print(eOilTempAlarm);
Serial3.print(&quot;\tMAX: &quot;);
Serial3.print(engineOilStats.maximum());
Serial3.print(&quot; F&quot;);
Serial3.print(&quot;\t\t\t\tAVG: &quot;);
Serial3.print(engineOilStats.average());
Serial3.println(&quot; F&quot;);

SD Card Logging:
logfile.print(eOilTempF);
logfile.print(&quot;,&quot;);
logfile.print(checkEngine);
logfile.print(&quot;,&quot;);
logfile.print(engineOilStats.maximum());
logfile.print(&quot;,&quot;);
logfile.print(engineOilStats.average());
logfile.print(&quot;,&quot;);

tl;dr
My datalogging section of my sketch is 567 lines of mostly repeated code, and I'm new at programming and need some tutorials/terms to google to make it more effecient.
You can combine the Streaming library with a wrapper class that sends data to multiple serial destinations.
Here's a little example:
#include &lt;Streaming.h&gt;

class DualSerial : public Print {
    private:
        Print *_dev1;
        Print *_dev2;

    public:
        DualSerial(Print &amp;s1, Print &amp;s2) : _dev1(&amp;s1), _dev2(&amp;s2) {}

        size_t write(uint8_t c) {
            _dev1-&gt;write(c);
            _dev2-&gt;write(c);
        }      
};

DualSerial remote(Serial, Serial3);

void setup() {
    Serial.begin(115200);
    Serial3.begin(115200);
}

void loop() {
    // Both Serial and Serial3 will receive this
    remote &lt;&lt; &quot;The time is: &quot; &lt;&lt; millis() &lt;&lt; endl;
    delay(1000);
}

The Streaming class will work with anything that inherits from the Print class, which includes the SD card's File class, so you can also use it for writing to the SD card:
logfile &lt;&lt; eOilTempF &lt;&lt; &quot;,&quot; 
        &lt;&lt; checkEngine &lt;&lt; &quot;,&quot; 
        &lt;&lt; engineOilStats.maximum() &lt;&lt; &quot;,&quot;
        &lt;&lt; engineOilStats.average() &lt;&lt; endl;