pub fn logger(&self, behavior: OutputClientBehavior) -> OutputClient<W> {
        let buffer = match behavior {
            OutputClientBehavior::Passthrough => None,
            OutputClientBehavior::InMemoryBuffer | OutputClientBehavior::Grouped => {
                Some(Default::default())
            }
        };
        let writers = self.writers.clone();
        OutputClient {
            behavior,
            buffer,
            writers,
            primary: Default::default(),
            error: Default::default(),
        }
    }
Produces a new client that will send all bytes that it receives to the
underlying sink. Behavior of how these bytes are sent is controlled
by the behavior parameter. Note that OutputClient intentionally doesn't
implement Sync as if you want to write to the same sink
from multiple threads, then you should create a logger for each thread.
crates/turborepo-ui/src/output.rs