fn flush()

in logger/src/single.rs [75:103]


    fn flush(&mut self) -> Result<(), Error> {
        LOG_FLUSH.increment();
        while let Some(mut log_buffer) = self.log_filled.pop() {
            if let Err(e) = self.output.write_all(&log_buffer) {
                LOG_WRITE_EX.increment();
                warn!("failed write to log buffer: {}", e);
                return Err(e);
            }

            // shrink oversized buffer
            if log_buffer.len() > self.buffer_size {
                log_buffer.truncate(self.buffer_size);
                log_buffer.shrink_to_fit();
                log_buffer.clear();
            }

            // recycle the buffer, buffer will be dropped if the pool is full
            log_buffer.clear();
            let _ = self.log_cleared.push(log_buffer);
        }

        if let Err(e) = self.output.flush() {
            LOG_FLUSH_EX.increment();
            warn!("failed to flush log: {}", e);
            Err(e)
        } else {
            Ok(())
        }
    }