pub struct LoggerConfig {
pub show_file_info: bool,
pub show_date_in_stdout: bool,
pub use_colors: bool,
pub level: LevelFilter,
pub module_filters: ModuleFilters,
}Expand description
Configuration for the logger.
Fields§
§show_file_info: boolWhether to show file and line information in log messages
show_date_in_stdout: boolWhether to show date in stdout logs (always shown in file logs)
use_colors: boolWhether to use colors in stdout logs
level: LevelFilterMinimum log level to display
module_filters: ModuleFiltersModule-level log filters
Implementations§
Source§impl LoggerConfig
impl LoggerConfig
pub fn new() -> Self
Sourcepub fn builder() -> LoggerConfigBuilder
pub fn builder() -> LoggerConfigBuilder
Examples found in repository?
examples/stdout_only.rs (line 15)
13fn main() {
14 // Initialize logger with stdout only (no file output) with colors
15 let config = LoggerConfig::builder()
16 .level(LevelFilter::Debug) // Show Debug level and above
17 .show_file_info(false) // Don't show file and line information
18 .use_colors(true) // Use colors in output
19 .build();
20
21 if let Err(e) = init_stdout_logger(config) {
22 eprintln!("Failed to initialize logger: {e}");
23 return;
24 }
25
26 println!("Logger initialized! Output will only appear on stdout.");
27 println!("Notice that TRACE level messages won't show because we set Debug as minimum level.");
28 println!("Also note that file and line information is hidden for cleaner output.");
29
30 // Log messages at different levels to demonstrate filtering
31 trace!("This is a TRACE message - you won't see this");
32 debug!("This is a DEBUG message - visible");
33 info!("This is an INFO message - visible");
34 warn!("This is a WARNING message - visible");
35 error!("This is an ERROR message - visible");
36
37 // Log messages with dynamic content
38 for i in 1..=3 {
39 let value = i * 10;
40 debug!("Debug calculation: {i} * 10 = {value}");
41 info!("Processing item #{i} with value {value}");
42 }
43
44 info!("Example completed");
45}More examples
examples/basic_usage.rs (line 21)
15fn main() {
16 // Initialize logger with file output and colored stdout
17 let log_path = "application.log";
18
19 // Create a custom configuration with the builder pattern
20 // This shows how to configure every aspect of the logger
21 let config = LoggerConfig::builder()
22 .level(LevelFilter::Trace) // Show all log levels, including TRACE
23 .show_file_info(true) // Include file and line info in logs
24 .show_date_in_stdout(false) // Only show time (HH:MM:SS) in console output
25 .use_colors(true) // Use colors for different log levels
26 .build();
27
28 if let Err(e) = init_logger_with_config(Some(log_path), config) {
29 eprintln!("Failed to initialize logger: {e}");
30 return;
31 }
32
33 println!("Logger initialized! Check {log_path} for log output.");
34 println!("Log messages will appear both on stdout and in the log file.");
35 println!("Notice that stdout logs show time only while the file includes dates.");
36
37 // Log messages at different levels to demonstrate the hierarchy
38 // All of these will appear because we set level to Trace
39 trace!("This is a TRACE message"); // Lowest level, normally hidden
40 debug!("This is a DEBUG message"); // For developer information
41 info!("This is an INFO message"); // Normal application events
42 warn!("This is a WARNING message"); // Important but non-critical issues
43 error!("This is an ERROR message"); // Critical issues that need attention
44
45 // Simulate some application activity
46 for i in 1..=5 {
47 info!("Application is running... iteration {i}");
48 sleep(Duration::from_millis(500));
49 }
50
51 // Log a final message
52 info!("Application finished successfully");
53
54 println!("\nAfter running this example, check the 'application.log' file");
55 println!("to see how logs are formatted differently for file output.");
56}examples/log_level_numeric.rs (line 46)
26fn main() {
27 // Read LOG_LEVEL from environment
28 let log_level = match std::env::var("LOG_LEVEL") {
29 Ok(level) => match level.parse::<u8>() {
30 Ok(level) => match level {
31 0 => LevelFilter::Off,
32 1 => LevelFilter::Error,
33 2 => LevelFilter::Warn,
34 3 => LevelFilter::Info,
35 4 => LevelFilter::Debug,
36 _ => LevelFilter::Trace,
37 },
38 Err(_) => LevelFilter::Warn,
39 },
40 Err(_) => LevelFilter::Warn,
41 };
42
43 // Configure logger with module filters
44 if let Err(e) = init_logger_with_config(
45 Some("log_level_numeric.log"),
46 LoggerConfig::builder()
47 .show_file_info(true)
48 .level(log_level)
49 .filter_module("log_level_numeric::noisy_library", LevelFilter::Error) // Only errors from noisy_library
50 .build(),
51 ) {
52 eprintln!("Failed to initialize logger: {}", e);
53 std::process::exit(1);
54 }
55
56 println!("=== LOG_LEVEL Numeric Example ===");
57 println!(
58 "Current LOG_LEVEL: {:?}",
59 std::env::var("LOG_LEVEL").unwrap_or_else(|_| "not set (using Warn)".to_string())
60 );
61 println!("Effective level: {:?}", log_level);
62 println!("\nLOG_LEVEL values:");
63 println!(" 0 = Off");
64 println!(" 1 = Error");
65 println!(" 2 = Warn");
66 println!(" 3 = Info");
67 println!(" 4 = Debug");
68 println!(" 5+ = Trace");
69 println!("\n--- Application Logs ---\n");
70
71 // Log messages at different levels
72 trace!("This is a TRACE message (level 5+)");
73 debug!("This is a DEBUG message (level 4)");
74 info!("This is an INFO message (level 3)");
75 warn!("This is a WARN message (level 2)");
76 error!("This is an ERROR message (level 1)");
77
78 // Call noisy library (its logs should be suppressed)
79 println!("\nCalling noisy_library (its logs are filtered to Error only):");
80 noisy_library::do_work();
81
82 println!("\n--- End of Logs ---");
83 println!("\nNote: Logs from 'noisy_library' are filtered to Error level only,");
84 println!("so you should not see its debug, info, or warn messages.");
85}Sourcepub fn from_env() -> Self
pub fn from_env() -> Self
Create a configuration from environment variables.
Reads configuration from:
RUST_LOGfor module-level filtering (e.g., “debug”, “my_crate=trace”)LOG_LEVELfor numeric log level (0=Off, 1=Error, 2=Warn, 3=Info, 4=Debug, 5+=Trace)
If both are set, RUST_LOG takes precedence for the default level.
Sourcepub fn production() -> Self
pub fn production() -> Self
Examples found in repository?
examples/production.rs (line 11)
7fn main() {
8 // Step 1: Compare production vs development logger output
9 println!("=== PRODUCTION LOGGER SIMULATION ===");
10 // Production config: no file info, INFO level minimum
11 let prod_config = LoggerConfig::production();
12 println!("Production settings:");
13 println!(" - Log level: Info (no Debug or Trace messages)");
14 println!(" - File info: Hidden (cleaner logs)");
15 println!(" - Colors: Enabled (for better readability)");
16 println!(" - Date in console: Hidden (time only for brevity)\n");
17
18 // Manually format some logs with production settings
19 format_and_print_logs("Production", &prod_config);
20
21 // Reset logs
22 println!("\n\n=== DEVELOPMENT LOGGER SIMULATION ===");
23 // Development config: with file info, DEBUG level minimum
24 let dev_config = LoggerConfig::development();
25 println!("Development settings:");
26 println!(" - Log level: Debug (includes debug messages)");
27 println!(" - File info: Shown (helps with debugging)");
28 println!(" - Colors: Enabled (for better readability)");
29 println!(" - Date in console: Hidden (time only for brevity)\n");
30
31 // Manually format logs with development settings
32 format_and_print_logs("Development", &dev_config);
33
34 println!("\nNote: In production mode, logs are more concise (no file info, only time)");
35 println!(
36 "but the log file still contains complete information including date and file details."
37 );
38
39 // Step 2: Initialize a real logger for demonstration
40 println!("\n=== ACTUAL LOGGER IMPLEMENTATION ===");
41 println!("Initializing a real logger with production settings...");
42 if let Err(e) = fstdout_logger::init_production_logger(Some("prod.log")) {
43 eprintln!("Failed to initialize logger: {e}");
44 return;
45 }
46
47 // Log some real messages
48 info!("This message was logged with the actual logger");
49 debug!("Debug info won't appear in production mode");
50 warn!("Warnings will appear");
51 error!("Errors will appear too");
52
53 println!("\nCheck 'prod.log' to see the file output format with full details!");
54}Sourcepub fn development() -> Self
pub fn development() -> Self
Examples found in repository?
examples/production.rs (line 24)
7fn main() {
8 // Step 1: Compare production vs development logger output
9 println!("=== PRODUCTION LOGGER SIMULATION ===");
10 // Production config: no file info, INFO level minimum
11 let prod_config = LoggerConfig::production();
12 println!("Production settings:");
13 println!(" - Log level: Info (no Debug or Trace messages)");
14 println!(" - File info: Hidden (cleaner logs)");
15 println!(" - Colors: Enabled (for better readability)");
16 println!(" - Date in console: Hidden (time only for brevity)\n");
17
18 // Manually format some logs with production settings
19 format_and_print_logs("Production", &prod_config);
20
21 // Reset logs
22 println!("\n\n=== DEVELOPMENT LOGGER SIMULATION ===");
23 // Development config: with file info, DEBUG level minimum
24 let dev_config = LoggerConfig::development();
25 println!("Development settings:");
26 println!(" - Log level: Debug (includes debug messages)");
27 println!(" - File info: Shown (helps with debugging)");
28 println!(" - Colors: Enabled (for better readability)");
29 println!(" - Date in console: Hidden (time only for brevity)\n");
30
31 // Manually format logs with development settings
32 format_and_print_logs("Development", &dev_config);
33
34 println!("\nNote: In production mode, logs are more concise (no file info, only time)");
35 println!(
36 "but the log file still contains complete information including date and file details."
37 );
38
39 // Step 2: Initialize a real logger for demonstration
40 println!("\n=== ACTUAL LOGGER IMPLEMENTATION ===");
41 println!("Initializing a real logger with production settings...");
42 if let Err(e) = fstdout_logger::init_production_logger(Some("prod.log")) {
43 eprintln!("Failed to initialize logger: {e}");
44 return;
45 }
46
47 // Log some real messages
48 info!("This message was logged with the actual logger");
49 debug!("Debug info won't appear in production mode");
50 warn!("Warnings will appear");
51 error!("Errors will appear too");
52
53 println!("\nCheck 'prod.log' to see the file output format with full details!");
54}Trait Implementations§
Source§impl Clone for LoggerConfig
impl Clone for LoggerConfig
Source§fn clone(&self) -> LoggerConfig
fn clone(&self) -> LoggerConfig
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for LoggerConfig
impl Debug for LoggerConfig
Source§impl Default for LoggerConfig
impl Default for LoggerConfig
Source§fn default() -> Self
fn default() -> Self
Creates a default configuration with fixed values.
To read from environment variables (RUST_LOG, LOG_LEVEL), use LoggerConfig::from_env() instead.
Default values:
show_file_info:trueshow_date_in_stdout:falseuse_colors:truelevel:Infomodule_filters: Empty (all modules at Info level)
Auto Trait Implementations§
impl Freeze for LoggerConfig
impl RefUnwindSafe for LoggerConfig
impl Send for LoggerConfig
impl Sync for LoggerConfig
impl Unpin for LoggerConfig
impl UnwindSafe for LoggerConfig
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
Mutably borrows from an owned value. Read more