StripAnsiWriter

Struct StripAnsiWriter 

Source
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>

Source

pub fn new(inner: W) -> Self

Creates a new StripAnsiWriter that wraps the given writer.

Trait Implementations§

Source§

impl<'a, W: Write + 'a> MakeWriter<'a> for StripAnsiWriter<W>

Source§

type Writer = StripAnsiWriterGuard<'a, W>

The concrete io::Write implementation returned by make_writer.
Source§

fn make_writer(&'a self) -> Self::Writer

Returns an instance of Writer. Read more
Source§

fn make_writer_for(&'a self, meta: &Metadata<'_>) -> Self::Writer

Returns a Writer for writing data from the span or event described by the provided Metadata. Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<'a, M> MakeWriterExt<'a> for M
where M: MakeWriter<'a>,

Source§

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 more
Source§

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 more
Source§

fn with_filter<F>(self, filter: F) -> WithFilter<Self, F>
where Self: Sized, F: Fn(&Metadata<'_>) -> bool,

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 more
Source§

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 more
Source§

fn or_else<W, B>(self, other: B) -> OrElse<Self, B>
where Self: Sized + MakeWriter<'a, Writer = EitherWriter<W, Sink>>, B: MakeWriter<'a>, W: Write,

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
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more