Skip to main content

LoggerConfig

Struct LoggerConfig 

Source
pub struct LoggerConfig {
    pub policy: LogPolicy,
    pub output: LogOutputMode,
    pub file: Option<FileSinkConfig>,
    pub crash_events: usize,
    pub crash_bytes: usize,
}
Expand description

Complete explicit logger configuration.

Fields§

§policy: LogPolicy

Filtering and sanitization policy.

§output: LogOutputMode

Terminal, file, both, disabled or crash-only behavior.

§file: Option<FileSinkConfig>

File configuration used by file output or an explicit crash dump.

§crash_events: usize

Maximum events retained by crash-only mode.

§crash_bytes: usize

Maximum estimated bytes retained by crash-only mode.

Implementations§

Source§

impl LoggerConfig

Source

pub fn build(self) -> Result<ConfiguredLogger, LogConfigError>

Builds a logger with no hidden global state or background thread.

Examples found in repository?
examples/basic.rs (line 24)
18fn main() -> Result<(), appcore_log::LogConfigError> {
19    // Safe V4 terminal logging is explicit and creates no global state.
20    let logger = LoggerConfig {
21        output: LogOutputMode::Terminal,
22        ..LoggerConfig::default()
23    }
24    .build()?;
25
26    // The builder defaults to V4 and can be kept for related events.
27    let log = logger.dispatcher().event(0, "application");
28
29    log.info("application started");
30    log.warn("connection is slower than expected");
31    log.error("document could not be saved");
32
33    Ok(())
34}
More examples
Hide additional examples
examples/output_modes.rs (line 32)
15fn main() -> Result<(), appcore_log::LogConfigError> {
16    // Replace this with Disabled, Terminal, File, TerminalAndFile or CrashOnly.
17    let output = LogOutputMode::CrashOnly;
18
19    let logger = LoggerConfig {
20        output,
21        file: Some(FileSinkConfig {
22            path: std::env::temp_dir().join("my-application-crash.jsonl"),
23            max_bytes: LOG_SIZE_2_MIB,
24            sync_each_write: true,
25            retention: 1,
26            archive: None,
27        }),
28        crash_events: 128,
29        crash_bytes: 512 * 1024,
30        ..LoggerConfig::default()
31    }
32    .build()?;
33
34    let log = logger.dispatcher().event(0, "application");
35
36    log.info("kept only in the bounded crash ring");
37
38    // Call this from the application's panic/crash boundary. In every other
39    // mode it is a no-op and returns zero.
40    let _written_events = logger.dump_crash()?;
41
42    Ok(())
43}
examples/file_logging.rs (line 50)
22fn main() -> Result<(), appcore_log::LogConfigError> {
23    // Keep generated output predictable and inside Cargo's ignored target tree.
24    let output_directory = PathBuf::from("target/appcore-log-example");
25    std::fs::create_dir_all(&output_directory).map_err(|_| LogConfigError::Sink(LogError::Io))?;
26
27    let active_file = output_directory.join("application.jsonl");
28
29    // Two rotations stay beside the active file. Older rotations move into
30    // archive/YYYY/MM and the complete archive never exceeds 120 files.
31    let archive_directory = output_directory.join("archive");
32    let mut policy = LogPolicy::new(Verbosity::V4);
33    policy.set_component("sync", Verbosity::V8);
34
35    let logger = LoggerConfig {
36        policy,
37        output: LogOutputMode::TerminalAndFile,
38        file: Some(FileSinkConfig {
39            path: active_file,
40            max_bytes: LOG_SIZE_8_MIB,
41            sync_each_write: false,
42            retention: 2,
43            archive: Some(FileArchiveConfig {
44                directory: archive_directory,
45                max_files: 120,
46            }),
47        }),
48        ..LoggerConfig::default()
49    }
50    .build()?;
51
52    let application = logger.dispatcher().event(0, "application");
53    let sync = logger.dispatcher().event(1, "sync.transport");
54
55    application.info("application ready; inspect target/appcore-log-example/application.jsonl");
56
57    // The parent component policy makes this V7 diagnostic visible.
58    sync.verbosity(7).debug("replication batch sent");
59
60    sync.warn("peer response was delayed");
61
62    let stats = logger.dispatcher().stats();
63    assert_eq!(stats.sink_failures, 0);
64
65    Ok(())
66}

Trait Implementations§

Source§

impl Clone for LoggerConfig

Source§

fn clone(&self) -> LoggerConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LoggerConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for LoggerConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.