zellij-org/zellij · error · std::io::Error
Exceeded log buffer size. Make sure that your plugin calls…
Error message
Exceeded log buffer size. Make sure that your plugin calls flush on stderr on valid UTF-8 symbol boundary. Additionally, make sure that your log message contains endline \n symbol.
What it means
Error "Exceeded log buffer size. Make sure that your plugin calls flush on stderr on valid UTF-8 symbol boundary. Additionally, make sure that your log message contains endline \n symbol." thrown in zellij-org/zellij.
Solutions
- Call flush on stderr at valid UTF-8 boundaries in the plugin.
- Include a newline in plugin log messages and keep individual messages smaller.
When it happens
Trigger: Occurs at zellij-server/src/logging_pipe.rs:47 when the operation fails: "Exceeded log buffer size. Make sure that your plugin calls flush on stderr on valid UTF-8 symbol boundary. Additionally,". Currently there is no defensive handling preventing or contextualizing this failure before it surfaces.
Common situations: Plugin logging very long lines or flushing mid-UTF-8-character.
AI-assisted analysis of zellij-org/zellij@5cb5df5cce (2026-08-19).
Data as JSON: /api/errors/24fb0fb2d697c43d.
Report an issue: GitHub.
Appendix: source
Thrown at zellij-server/src/logging_pipe.rs:47
"|{:<25.25}| {} [{:<10.15}] {}",
self.plugin_name,
chrono::Local::now().format("%Y-%m-%d %H:%M:%S.%3f"),
format!("id: {}", self.plugin_id),
message
);
}
}
impl Write for LoggingPipe {
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
if self.buffer.len() + buf.len() > ZELLIJ_MAX_PIPE_BUFFER_SIZE {
let error_msg =
"Exceeded log buffer size. Make sure that your plugin calls flush on stderr on \
valid UTF-8 symbol boundary. Additionally, make sure that your log message contains \
endline \\n symbol.";
error!("{}: {}", self.plugin_name, error_msg);
self.buffer.clear();
return Err(std::io::Error::new(
std::io::ErrorKind::InvalidData,
error_msg,
));
}
self.buffer.extend(buf);
self.flush()?;
Ok(buf.len())
}
// When we flush, check if current buffer is valid utf8 string, split by '\n' and truncate buffer in the process.
// We assume that eventually, flush will be called on valid string boundary (i.e. std::str::from_utf8(..).is_ok() returns true at some point).
// Above assumption might not be true, in which case we'll have to think about it. Make it simple for now.
fn flush(&mut self) -> std::io::Result<()> {
self.buffer.make_contiguous();
match std::str::from_utf8(self.buffer.as_slices().0) {View on GitHub (pinned to 5cb5df5cce)