RotatingFileSinkBuilder

Struct RotatingFileSinkBuilder 

Source
pub struct RotatingFileSinkBuilder<ArgBP, ArgRP> { /* private fields */ }
Expand description

§

§Note

The generics here are designed to check for required fields at compile time, users should not specify them manually and/or depend on them. If the generic concrete types or the number of generic types are changed in the future, it may not be considered as a breaking change.

Implementations§

Source§

impl<ArgBP, ArgRP> RotatingFileSinkBuilder<ArgBP, ArgRP>

Source

pub fn base_path<P>( self, base_path: P, ) -> RotatingFileSinkBuilder<PathBuf, ArgRP>
where P: Into<PathBuf>,

Specifies the base path of the log file.

The path needs to be suffixed with an extension, if you expect the rotated eventual file names to contain the extension.

If there is an extension, the different rotation policies will insert relevant information in the front of the extension. If there is not an extension, it will be appended to the end.

Supposes the given base path is /path/to/base_file.log, the eventual file names may look like the following:

  • /path/to/base_file_1.log
  • /path/to/base_file_2.log
  • /path/to/base_file_2022-03-23.log
  • /path/to/base_file_2022-03-24.log
  • /path/to/base_file_2022-03-23_03.log
  • /path/to/base_file_2022-03-23_04.log

This parameter is required.

Examples found in repository?
examples/02-file.rs (line 34)
30fn configure_rotating_daily_file_logger() -> Result<(), Box<dyn std::error::Error>> {
31    let path = env::current_exe()?.with_file_name("rotating_daily.log");
32
33    let file_sink = RotatingFileSink::builder()
34        .base_path(path)
35        .rotation_policy(RotationPolicy::Daily { hour: 0, minute: 0 })
36        .build_arc()?;
37    let new_logger = Logger::builder().sink(file_sink).build_arc()?;
38    spdlog::set_default_logger(new_logger);
39
40    info!("this log will be written to the file `rotating_daily.log`, and the file will be rotated daily at 00:00");
41
42    Ok(())
43}
44
45fn configure_rotating_size_file_logger() -> Result<(), Box<dyn std::error::Error>> {
46    let path = env::current_exe()?.with_file_name("rotating_size.log");
47
48    let file_sink = RotatingFileSink::builder()
49        .base_path(path)
50        .rotation_policy(RotationPolicy::FileSize(1024))
51        .build_arc()?;
52    let new_logger = Logger::builder().sink(file_sink).build_arc()?;
53    spdlog::set_default_logger(new_logger);
54
55    info!("this log will be written to the file `rotating_size.log`, and the file will be rotated when its size reaches 1024 bytes");
56
57    Ok(())
58}
59
60fn configure_rotating_hourly_file_logger() -> Result<(), Box<dyn std::error::Error>> {
61    let path = env::current_exe()?.with_file_name("rotating_hourly.log");
62
63    let file_sink = RotatingFileSink::builder()
64        .base_path(path)
65        .rotation_policy(RotationPolicy::Hourly)
66        .build_arc()?;
67    let new_logger = Logger::builder().sink(file_sink).build_arc()?;
68    spdlog::set_default_logger(new_logger);
69
70    info!("this log will be written to the file `rotating_hourly.log`, and the file will be rotated every hour");
71
72    Ok(())
73}
74
75fn configure_rotating_period_file_logger() -> Result<(), Box<dyn std::error::Error>> {
76    let path = env::current_exe()?.with_file_name("rotating_period.log");
77
78    let file_sink = RotatingFileSink::builder()
79        .base_path(path)
80        .rotation_policy(RotationPolicy::Period(Duration::from_secs(
81            60 * 90, // 90 minutes
82        )))
83        .build_arc()?;
84    let new_logger = Logger::builder().sink(file_sink).build_arc()?;
85    spdlog::set_default_logger(new_logger);
86
87    info!("this log will be written to the file `rotating_period.log`, and the file will be rotated every 1.5 hours");
88
89    Ok(())
90}
Source

pub fn rotation_policy( self, rotation_policy: RotationPolicy, ) -> RotatingFileSinkBuilder<ArgBP, RotationPolicy>

Specifies the rotation policy.

This parameter is required.

Examples found in repository?
examples/02-file.rs (line 35)
30fn configure_rotating_daily_file_logger() -> Result<(), Box<dyn std::error::Error>> {
31    let path = env::current_exe()?.with_file_name("rotating_daily.log");
32
33    let file_sink = RotatingFileSink::builder()
34        .base_path(path)
35        .rotation_policy(RotationPolicy::Daily { hour: 0, minute: 0 })
36        .build_arc()?;
37    let new_logger = Logger::builder().sink(file_sink).build_arc()?;
38    spdlog::set_default_logger(new_logger);
39
40    info!("this log will be written to the file `rotating_daily.log`, and the file will be rotated daily at 00:00");
41
42    Ok(())
43}
44
45fn configure_rotating_size_file_logger() -> Result<(), Box<dyn std::error::Error>> {
46    let path = env::current_exe()?.with_file_name("rotating_size.log");
47
48    let file_sink = RotatingFileSink::builder()
49        .base_path(path)
50        .rotation_policy(RotationPolicy::FileSize(1024))
51        .build_arc()?;
52    let new_logger = Logger::builder().sink(file_sink).build_arc()?;
53    spdlog::set_default_logger(new_logger);
54
55    info!("this log will be written to the file `rotating_size.log`, and the file will be rotated when its size reaches 1024 bytes");
56
57    Ok(())
58}
59
60fn configure_rotating_hourly_file_logger() -> Result<(), Box<dyn std::error::Error>> {
61    let path = env::current_exe()?.with_file_name("rotating_hourly.log");
62
63    let file_sink = RotatingFileSink::builder()
64        .base_path(path)
65        .rotation_policy(RotationPolicy::Hourly)
66        .build_arc()?;
67    let new_logger = Logger::builder().sink(file_sink).build_arc()?;
68    spdlog::set_default_logger(new_logger);
69
70    info!("this log will be written to the file `rotating_hourly.log`, and the file will be rotated every hour");
71
72    Ok(())
73}
74
75fn configure_rotating_period_file_logger() -> Result<(), Box<dyn std::error::Error>> {
76    let path = env::current_exe()?.with_file_name("rotating_period.log");
77
78    let file_sink = RotatingFileSink::builder()
79        .base_path(path)
80        .rotation_policy(RotationPolicy::Period(Duration::from_secs(
81            60 * 90, // 90 minutes
82        )))
83        .build_arc()?;
84    let new_logger = Logger::builder().sink(file_sink).build_arc()?;
85    spdlog::set_default_logger(new_logger);
86
87    info!("this log will be written to the file `rotating_period.log`, and the file will be rotated every 1.5 hours");
88
89    Ok(())
90}
Source

pub fn max_files(self, max_files: usize) -> Self

Specifies the maximum number of files.

If the number of existing files reaches this parameter, the oldest file will be deleted on the next rotation.

Specify 0 for no limit.

This parameter is optional, and defaults to 0.

Source

pub fn rotate_on_open(self, rotate_on_open: bool) -> Self

Specifies whether to rotate files once when constructing RotatingFileSink.

For the RotationPolicy::Daily, RotationPolicy::Hourly, and RotationPolicy::Period rotation policies, it may truncate the contents of the existing file if the parameter is true, since the file name is a time point and not an index.

This parameter is optional, and defaults to false.

Source

pub fn capacity(self, capacity: usize) -> Self

Specifies the internal buffer capacity.

This parameter is optional, and defaults to the value consistent with std.

Source

pub fn level_filter(self, level_filter: LevelFilter) -> Self

Specifies a log level filter.

This parameter is optional, and defaults to LevelFilter::All.

Source

pub fn formatter<F>(self, formatter: F) -> Self
where F: Formatter + 'static,

Specifies a formatter.

This parameter is optional, and defaults to FullFormatter.

Source

pub fn error_handler<F: Into<ErrorHandler>>(self, handler: F) -> Self

Specifies an error handler.

This parameter is optional, and defaults to ErrorHandler::default().

Source§

impl RotatingFileSinkBuilder<PathBuf, RotationPolicy>

Source

pub fn build(self) -> Result<RotatingFileSink>

Builds a RotatingFileSink.

§Error

If the argument rotation_policy is invalid, or an error occurs opening the file, Error::CreateDirectory or Error::OpenFile will be returned.

Source

pub fn build_arc(self) -> Result<Arc<RotatingFileSink>>

Builds a Arc<RotatingFileSink>.

This is a shorthand method for .build().map(Arc::new).

Examples found in repository?
examples/02-file.rs (line 36)
30fn configure_rotating_daily_file_logger() -> Result<(), Box<dyn std::error::Error>> {
31    let path = env::current_exe()?.with_file_name("rotating_daily.log");
32
33    let file_sink = RotatingFileSink::builder()
34        .base_path(path)
35        .rotation_policy(RotationPolicy::Daily { hour: 0, minute: 0 })
36        .build_arc()?;
37    let new_logger = Logger::builder().sink(file_sink).build_arc()?;
38    spdlog::set_default_logger(new_logger);
39
40    info!("this log will be written to the file `rotating_daily.log`, and the file will be rotated daily at 00:00");
41
42    Ok(())
43}
44
45fn configure_rotating_size_file_logger() -> Result<(), Box<dyn std::error::Error>> {
46    let path = env::current_exe()?.with_file_name("rotating_size.log");
47
48    let file_sink = RotatingFileSink::builder()
49        .base_path(path)
50        .rotation_policy(RotationPolicy::FileSize(1024))
51        .build_arc()?;
52    let new_logger = Logger::builder().sink(file_sink).build_arc()?;
53    spdlog::set_default_logger(new_logger);
54
55    info!("this log will be written to the file `rotating_size.log`, and the file will be rotated when its size reaches 1024 bytes");
56
57    Ok(())
58}
59
60fn configure_rotating_hourly_file_logger() -> Result<(), Box<dyn std::error::Error>> {
61    let path = env::current_exe()?.with_file_name("rotating_hourly.log");
62
63    let file_sink = RotatingFileSink::builder()
64        .base_path(path)
65        .rotation_policy(RotationPolicy::Hourly)
66        .build_arc()?;
67    let new_logger = Logger::builder().sink(file_sink).build_arc()?;
68    spdlog::set_default_logger(new_logger);
69
70    info!("this log will be written to the file `rotating_hourly.log`, and the file will be rotated every hour");
71
72    Ok(())
73}
74
75fn configure_rotating_period_file_logger() -> Result<(), Box<dyn std::error::Error>> {
76    let path = env::current_exe()?.with_file_name("rotating_period.log");
77
78    let file_sink = RotatingFileSink::builder()
79        .base_path(path)
80        .rotation_policy(RotationPolicy::Period(Duration::from_secs(
81            60 * 90, // 90 minutes
82        )))
83        .build_arc()?;
84    let new_logger = Logger::builder().sink(file_sink).build_arc()?;
85    spdlog::set_default_logger(new_logger);
86
87    info!("this log will be written to the file `rotating_period.log`, and the file will be rotated every 1.5 hours");
88
89    Ok(())
90}

Auto Trait Implementations§

§

impl<ArgBP, ArgRP> !Freeze for RotatingFileSinkBuilder<ArgBP, ArgRP>

§

impl<ArgBP, ArgRP> !RefUnwindSafe for RotatingFileSinkBuilder<ArgBP, ArgRP>

§

impl<ArgBP, ArgRP> Send for RotatingFileSinkBuilder<ArgBP, ArgRP>
where ArgBP: Send, ArgRP: Send,

§

impl<ArgBP, ArgRP> Sync for RotatingFileSinkBuilder<ArgBP, ArgRP>
where ArgBP: Sync, ArgRP: Sync,

§

impl<ArgBP, ArgRP> Unpin for RotatingFileSinkBuilder<ArgBP, ArgRP>
where ArgBP: Unpin, ArgRP: Unpin,

§

impl<ArgBP, ArgRP> !UnwindSafe for RotatingFileSinkBuilder<ArgBP, ArgRP>

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

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<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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

§

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

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

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

Performs the conversion.