Struct tracing_appender::rolling::RollingFileAppender
source · pub struct RollingFileAppender { /* private fields */ }
Expand description
A file appender with the ability to rotate log files at a fixed schedule.
RollingFileAppender
implements the std:io::Write
trait and will
block on write operations. It may be used with NonBlocking
to perform
writes without blocking the current thread.
Additionally, RollingFileAppender
also implements the MakeWriter
trait from tracing-subscriber
, so it may also be used
directly, without NonBlocking
.
Examples
Rolling a log file once every hour:
let file_appender = tracing_appender::rolling::hourly("/some/directory", "prefix");
Combining a RollingFileAppender
with another MakeWriter
implementation:
use tracing_subscriber::fmt::writer::MakeWriterExt;
// Log all events to a rolling log file.
let logfile = tracing_appender::rolling::hourly("/logs", "myapp-logs");
// Log `INFO` and above to stdout.
let stdout = std::io::stdout.with_max_level(tracing::Level::INFO);
tracing_subscriber::fmt()
// Combine the stdout and log file `MakeWriter`s into one
// `MakeWriter` that writes to both
.with_writer(stdout.and(logfile))
.init();
Implementations§
source§impl RollingFileAppender
impl RollingFileAppender
sourcepub fn new(
rotation: Rotation,
directory: impl AsRef<Path>,
filename_prefix: impl AsRef<Path>
) -> RollingFileAppender ⓘ
pub fn new( rotation: Rotation, directory: impl AsRef<Path>, filename_prefix: impl AsRef<Path> ) -> RollingFileAppender ⓘ
Creates a new RollingFileAppender
.
A RollingFileAppender
will have a fixed rotation whose frequency is
defined by Rotation
. The directory
and
file_name_prefix
arguments determine the location and file name’s prefix
of the log file. RollingFileAppender
will automatically append the current date
and hour (UTC format) to the file name.
Alternatively, a RollingFileAppender
can be constructed using one of the following helpers:
Additional parameters can be configured using RollingFileAppender::builder
.
Examples
use tracing_appender::rolling::{RollingFileAppender, Rotation};
let file_appender = RollingFileAppender::new(Rotation::HOURLY, "/some/directory", "prefix.log");
sourcepub fn builder() -> Builder
pub fn builder() -> Builder
Returns a new Builder
for configuring a RollingFileAppender
.
The builder interface can be used to set additional configuration parameters when constructing a new appender.
Unlike RollingFileAppender::new
, the Builder::build
method
returns a Result
rather than panicking when the appender cannot be
initialized. Therefore, the builder interface can also be used when
appender initialization errors should be handled gracefully.
Examples
use tracing_appender::rolling::{RollingFileAppender, Rotation};
let file_appender = RollingFileAppender::builder()
.rotation(Rotation::HOURLY) // rotate log files once every hour
.filename_prefix("myapp") // log file names will be prefixed with `myapp.`
.filename_suffix("log") // log file names will be suffixed with `.log`
.build("/var/log") // try to build an appender that stores log files in `/var/log`
.expect("initializing rolling file appender failed");
Trait Implementations§
source§impl Debug for RollingFileAppender
impl Debug for RollingFileAppender
source§impl<'a> MakeWriter<'a> for RollingFileAppender
impl<'a> MakeWriter<'a> for RollingFileAppender
§type Writer = RollingWriter<'a>
type Writer = RollingWriter<'a>
io::Write
implementation returned by make_writer
.source§impl Write for RollingFileAppender
impl Write for RollingFileAppender
source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector
#69941)1.0.0 · source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored
#70436)Auto Trait Implementations§
impl RefUnwindSafe for RollingFileAppender
impl Send for RollingFileAppender
impl Sync for RollingFileAppender
impl Unpin for RollingFileAppender
impl UnwindSafe for RollingFileAppender
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<'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,
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 verbosethan
Level::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,
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>where
Self: Sized,
F: Fn(&Metadata<'_>) -> bool,
fn with_filter<F>(self, filter: F) -> WithFilter<Self, F>where Self: Sized, F: Fn(&Metadata<'_>) -> bool,
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>,
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>where
Self: MakeWriter<'a, Writer = EitherWriter<W, Sink>> + Sized,
B: MakeWriter<'a>,
W: Write,
fn or_else<W, B>(self, other: B) -> OrElse<Self, B>where Self: MakeWriter<'a, Writer = EitherWriter<W, Sink>> + Sized, B: MakeWriter<'a>, W: Write,
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