Components / content
LogStream builder
A virtualized, read-only log presentation.
A builder is RenderOnce. Construct and mount it in one expression.
use gpui_kit::content::LogStream;
Reviewed in log-stream.
Construct
new(ident: impl Into<Ident>, entries: impl IntoIterator<Item = LogEntry>) -> Self
Options
Chain onto the value.
state(state: LogStreamState) -> Self
visible_rows(rows: usize) -> Self
selected(id: impl Into<SharedString>) -> Self
on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self
on_copy(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self
ansi(ansi: bool) -> Self
Example · log-stream
fn log_stream(_window: &mut Window, cx: &mut App) -> AnyElement {
let theme = cx.theme().clone();
let entries = [
LogEntry::new("boot", "Fixture worker entered the queue")
.timestamp("09:41:02")
.level("INFO", Tone::Info)
.source("scheduler"),
LogEntry::new("claim", "Fixture worker claimed run demo-42")
.timestamp("09:41:03")
.level("INFO", Tone::Info)
.source("worker")
.search_hits(std::iter::once(23..26))
.current_hit(0),
LogEntry::new("cache", "Fixture cache was not warm")
.timestamp("09:41:04")
.level("WARN", Tone::Warning)
.source("cache"),
LogEntry::new("ansi", "\u{1b}[31mfailed\u{1b}[0m after retry")
.timestamp("09:41:04")
.level("ERR", Tone::Danger)
.source("worker"),
LogEntry::new("retry", "Fixture request completed after one retry")
.timestamp("09:41:05")
.level("INFO", Tone::Info)
.source("worker"),
LogEntry::new("finish", "Fixture run demo-42 completed")
.timestamp("09:41:06")
.level("DONE", Tone::Success)
.source("scheduler")
.search_hits(std::iter::once(12..19)),
];
stack(&theme)
.w(px(780.0))
.child(caption(
&theme,
"fixed virtual rows; metadata and search ranges are caller inputs",
))
.child(
LogStream::new("scene.log", entries)
.ansi(true)
.state(LogStreamState::Stale(
"The latest refresh did not complete; verified entries remain.".into(),
))
.visible_rows(5)
.selected("retry")
.on_select(|_, _, _| {})
.on_copy(|_, _, _| {}),
)
.into_any_element()
}