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(())
}
}