pub trait MakeWriter<'a> {
    type Writer: Write;

    // Required method
    fn make_writer(&'a self) -> Self::Writer;

    // Provided methods
    fn enabled(&self, meta: &Metadata<'_>) -> bool { ... }
    fn make_writer_for(&'a self, meta: &Metadata<'_>) -> Option<Self::Writer> { ... }
    fn line_len(&self) -> usize { ... }
}
Expand description

A type that can create fmt::Write instances.

This trait is already implemented for function pointers and immutably-borrowing closures that return an instance of fmt::Write, Additionally, it is implemented for [mycelium_util::sync::spin::Mutex] when the type inside the mutex implements fmt::Write.

The MakeWriter::make_writer_for method takes Metadata describing a span or event and returns a writer. MakeWriters can optionally provide implementations of this method with behaviors that differ based on the span or event being written. For example, events at different levels might be written to different output streams, or data from different targets might be written to separate log files. When the MakeWriter has no custom behavior based on metadata, the default implementation of make_writer_for simply calls self.make_writer(), ignoring the metadata. Therefore, when metadata is available, callers should prefer to call make_writer_for, passing in that metadata, so that the MakeWriter implementation can choose the appropriate behavior.

Required Associated Types§

source

type Writer: Write

The concrete fmt::Write implementation returned by make_writer.

Required Methods§

source

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

Returns an instance of Writer.

Implementer notes

A Subscriber will call this method each time an event is recorded. Ensure any state that must be saved across writes is not lost when the Writer instance is dropped. If creating a fmt::Write instance is expensive, be sure to cache it when implementing MakeWriter to improve performance.

Provided Methods§

source

fn enabled(&self, meta: &Metadata<'_>) -> bool

source

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

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

By default, this calls self.make_writer(), ignoring the provided metadata, but implementations can override this to provide metadata-specific behaviors.

This method allows MakeWriter implementations to implement different behaviors based on the span or event being written. The MakeWriter type might return different writers based on the provided metadata, or might write some values to the writer before or after providing it to the caller.

source

fn line_len(&self) -> usize

Implementations on Foreign Types§

source§

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

§

type Writer = EitherWriter<<M as MakeWriter<'a>>::Writer, NoWriter>

source§

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

source§

fn enabled(&self, meta: &Metadata<'_>) -> bool

source§

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

source§

fn line_len(&self) -> usize

source§

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

§

type Writer = MutexGuardWriter<'a, W>

source§

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

Implementors§

source§

impl<'a> MakeWriter<'a> for NoWriter

source§

impl<'a, A, B> MakeWriter<'a> for OrElse<A, B>
where A: MakeWriter<'a>, B: MakeWriter<'a>,

§

type Writer = EitherWriter<<A as MakeWriter<'a>>::Writer, <B as MakeWriter<'a>>::Writer>

source§

impl<'a, D> MakeWriter<'a> for MakeTextWriter<D>
where D: Draw + 'a,

Available on crate feature embedded-graphics only.
§

type Writer = TextWriter<'a, D>

source§

impl<'a, F, W> MakeWriter<'a> for F
where F: Fn() -> W, W: Write,

§

type Writer = W

source§

impl<'a, M, F> MakeWriter<'a> for WithFilter<M, F>
where M: MakeWriter<'a>, F: Fn(&Metadata<'_>) -> bool,

§

type Writer = <M as MakeWriter<'a>>::Writer

source§

impl<'a, M: MakeWriter<'a>> MakeWriter<'a> for WithMaxLevel<M>

§

type Writer = <M as MakeWriter<'a>>::Writer

source§

impl<'a, M: MakeWriter<'a>> MakeWriter<'a> for WithMinLevel<M>

§

type Writer = <M as MakeWriter<'a>>::Writer

source§

impl<'a, W> MakeWriter<'a> for WithLineLen<W>
where W: MakeWriter<'a>,

§

type Writer = <W as MakeWriter<'a>>::Writer

source§

impl<'mk, W> MakeWriter<'mk> for AnsiEscapes<W>
where W: MakeWriter<'mk>,

§

type Writer = AnsiEscapes<<W as MakeWriter<'mk>>::Writer>