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 [maitake::sync::blocking::Mutex]
when the type inside the mutex implements fmt::Write and the Lock type
implements [RawMutex].
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§
Sourcetype Writer: Write
type Writer: Write
The concrete fmt::Write implementation returned by make_writer.
Required Methods§
Sourcefn make_writer(&'a self) -> Self::Writer
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§
fn enabled(&self, meta: &Metadata<'_>) -> bool
Sourcefn make_writer_for(&'a self, meta: &Metadata<'_>) -> Option<Self::Writer>
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.
fn line_len(&self) -> usize
Implementations on Foreign Types§
Source§impl<'a, M> MakeWriter<'a> for Option<M>where
M: MakeWriter<'a>,
impl<'a, M> MakeWriter<'a> for Option<M>where
M: MakeWriter<'a>,
Source§impl<'a, W, Lock> MakeWriter<'a> for Mutex<W, Lock>where
W: Write + 'a,
Lock: RawMutex + 'a,
impl<'a, W, Lock> MakeWriter<'a> for Mutex<W, Lock>where
W: Write + 'a,
Lock: RawMutex + 'a,
type Writer = MutexGuardWriter<'a, W, Lock>
fn make_writer(&'a self) -> Self::Writer
Implementors§
Source§impl<'a, A, B> MakeWriter<'a> for OrElse<A, B>where
A: MakeWriter<'a>,
B: MakeWriter<'a>,
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.
impl<'a, D> MakeWriter<'a> for MakeTextWriter<D>where
D: Draw + 'a,
embedded-graphics only.