pub struct StripAnsiWriter<W> { /* private fields */ }Expand description
A writer wrapper that strips ANSI escape codes from all output.
This is used for file logging to ensure clean output even when stdout
layers use ANSI colors. Due to how tracing_subscriber shares span field
formatting between layers, ANSI codes from one layer can leak into others.
This wrapper strips those codes at write time.
Uses a zero-copy fast path when no ANSI codes are present. Thread-safe via internal Mutex.
§Example
use tauri_plugin_tracing::StripAnsiWriter;
use tauri_plugin_tracing::tracing_appender::non_blocking;
use tauri_plugin_tracing::tracing_subscriber::{fmt, layer::SubscriberExt, util::SubscriberInitExt};
let file_appender = tracing_appender::rolling::daily("/tmp/logs", "app.log");
let (non_blocking, _guard) = non_blocking(file_appender);
tracing_subscriber::registry()
.with(fmt::layer()) // stdout with ANSI
.with(fmt::layer().with_writer(StripAnsiWriter::new(non_blocking)).with_ansi(false))
.init();Implementations§
Source§impl<W> StripAnsiWriter<W>
impl<W> StripAnsiWriter<W>
Trait Implementations§
Source§impl<'a, W: Write + 'a> MakeWriter<'a> for StripAnsiWriter<W>
impl<'a, W: Write + 'a> MakeWriter<'a> for StripAnsiWriter<W>
Source§type Writer = StripAnsiWriterGuard<'a, W>
type Writer = StripAnsiWriterGuard<'a, W>
The concrete
io::Write implementation returned by make_writer.Auto Trait Implementations§
impl<W> !Freeze for StripAnsiWriter<W>
impl<W> RefUnwindSafe for StripAnsiWriter<W>
impl<W> Send for StripAnsiWriter<W>where
W: Send,
impl<W> Sync for StripAnsiWriter<W>where
W: Send,
impl<W> Unpin for StripAnsiWriter<W>where
W: Unpin,
impl<W> UnwindSafe for StripAnsiWriter<W>
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
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<'a, M> MakeWriterExt<'a> for Mwhere
M: MakeWriter<'a>,
impl<'a, M> MakeWriterExt<'a> for Mwhere
M: MakeWriter<'a>,
Source§fn with_max_level(self, level: Level) -> WithMaxLevel<Self>where
Self: Sized,
fn with_max_level(self, level: Level) -> WithMaxLevel<Self>where
Self: Sized,
Wraps
self and returns a MakeWriter that will only write output
for events at or below the provided verbosity Level. For instance,
Level::TRACE is considered to be _more verbosethanLevel::INFO`. Read moreSource§fn with_min_level(self, level: Level) -> WithMinLevel<Self>where
Self: Sized,
fn with_min_level(self, level: Level) -> WithMinLevel<Self>where
Self: Sized,
Wraps
self and returns a MakeWriter that will only write output
for events at or above the provided verbosity Level. Read moreSource§fn with_filter<F>(self, filter: F) -> WithFilter<Self, F>
fn with_filter<F>(self, filter: F) -> WithFilter<Self, F>
Wraps
self with a predicate that takes a span or event’s Metadata
and returns a bool. The returned MakeWriter’s
MakeWriter::make_writer_for method will check the predicate to
determine if a writer should be produced for a given span or event. Read moreSource§fn and<B>(self, other: B) -> Tee<Self, B>where
Self: Sized,
B: MakeWriter<'a>,
fn and<B>(self, other: B) -> Tee<Self, B>where
Self: Sized,
B: MakeWriter<'a>,
Combines
self with another type implementing MakeWriter, returning
a new MakeWriter that produces writers that write to both
outputs. Read moreSource§fn or_else<W, B>(self, other: B) -> OrElse<Self, B>
fn or_else<W, B>(self, other: B) -> OrElse<Self, B>
Combines
self with another type implementing MakeWriter, returning
a new MakeWriter that calls other’s make_writer if self’s
make_writer returns OptionalWriter::none. Read more