pub struct AiLogger { /* private fields */ }Expand description
Producer-side log facade. One per AI subsystem; each agent
connection gets a clone (cheap – internal state is
Arc<Mutex<...>>).
Cheap-by-design: append is O(1) amortized, level gating is one
HashMap lookup. Logging is not a hot path – per-chunk cost
is the session/update decode + apply, not the log emission.
Implementations§
Source§impl AiLogger
impl AiLogger
Sourcepub fn new(default_min_level: AiLogLevel, default_capacity: usize) -> Self
pub fn new(default_min_level: AiLogLevel, default_capacity: usize) -> Self
Construct a logger with the given default min level and
default per-session ring capacity (e.g. AiLogLevel::Info,
10_000). Conservative defaults: Info filters out debug/trace
noise; 10k records ≈ a few MB of memory at most.
Sourcepub fn set_event_publisher(&self, publisher: AiLogEventPublisher)
pub fn set_event_publisher(&self, publisher: AiLogEventPublisher)
Install / replace the event publisher. Subsequent log
calls fire the closure with AiLogPushed after the
record lands in its ring. The App wires this at boot so the
runtime event bus sees every append; subscribers (live log
views) drain the bus on tick.
Sourcepub fn with_defaults() -> Self
pub fn with_defaults() -> Self
Sensible defaults: Info level, 10k records / ring.
Sourcepub fn log(
&self,
session: Option<&SessionKey>,
level: AiLogLevel,
source: AiLogSource,
message: impl Into<String>,
)
pub fn log( &self, session: Option<&SessionKey>, level: AiLogLevel, source: AiLogSource, message: impl Into<String>, )
Append a record. Gated by per-session min level (or the
default). Records with session = None route to the
subsystem-wide ring (*ai*) and use the default min level.
Sourcepub fn set_session_level(&self, session: SessionKey, level: Option<AiLogLevel>)
pub fn set_session_level(&self, session: SessionKey, level: Option<AiLogLevel>)
Set per-session min level. None removes the override and
reverts to the default.
Sourcepub fn set_default_level(&self, level: AiLogLevel)
pub fn set_default_level(&self, level: AiLogLevel)
Set the default min level (applies to subsystem-wide records and to sessions without an override).
Sourcepub fn set_default_capacity(&self, capacity: usize)
pub fn set_default_capacity(&self, capacity: usize)
Set the default ring capacity. Existing rings are resized; future per-session rings inherit the new value.
Sourcepub fn snapshot_global(&self) -> Vec<AiLogRecord>
pub fn snapshot_global(&self) -> Vec<AiLogRecord>
Snapshot the subsystem-wide ring. Used by the *ai* buffer
view to populate its body.
Sourcepub fn snapshot_session(&self, session: &SessionKey) -> Vec<AiLogRecord>
pub fn snapshot_session(&self, session: &SessionKey) -> Vec<AiLogRecord>
Snapshot a session’s ring (empty if the session has never logged anything).
Sourcepub fn known_sessions(&self) -> Vec<SessionKey>
pub fn known_sessions(&self) -> Vec<SessionKey>
List every session with a per-session ring. Useful for
:ai-status and the *ai* buffer’s “sessions” header.
Sourcepub fn clear_global(&self)
pub fn clear_global(&self)
Drop the subsystem-wide ring’s contents.
Sourcepub fn clear_session(&self, session: &SessionKey)
pub fn clear_session(&self, session: &SessionKey)
Drop a session’s ring contents.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for AiLogger
impl RefUnwindSafe for AiLogger
impl Send for AiLogger
impl Sync for AiLogger
impl Unpin for AiLogger
impl UnsafeUnpin for AiLogger
impl UnwindSafe for AiLogger
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more