pub struct StderrLogger {}Expand description
Implements a GenLogger that outputs to Stderr
§Simple Example
Instantiates a logger with default message and timestamp format
use log::info;
use log::LevelFilter;
use poly_logger::StderrLogger;
let mut logger = StderrLogger::new(LevelFilter::Info);
logger.init().unwrap();
info!("This is an INFO message");§Customized Example
Implements with custom timestamp format and message format
use log::info;
use log::LevelFilter;
use poly_logger::StderrLogger;
let mut logger = StderrLogger::new(LevelFilter::Info);
logger.timestamp_format("%X%.6f")
.msg_format("[{timestamp} {file}:{line}] - {level} - {args}");
logger.init().unwrap();
info!("This is an INFO message with custom formatting");§Note
The call to new() is actually returning an instance of GenLogger
Implementations§
Source§impl StderrLogger
impl StderrLogger
Sourcepub fn new(level_filter: LevelFilter) -> GenLogger<Stderr>
pub fn new(level_filter: LevelFilter) -> GenLogger<Stderr>
Examples found in repository?
More examples
examples/stderr.rs (line 6)
5fn main() {
6 let mut logger = StderrLogger::new(LevelFilter::Info);
7
8 logger.timestamp_format("%X%.6f")
9 .msg_format("[{timestamp} {file}:{line}] - {level} - {args}");
10 logger.init().unwrap();
11
12 trace!("This is an TRACE message");
13 debug!("This is a DEBUG message");
14 info!("This is an INFO message");
15 warn!("This is a WARN message");
16 error!("This is an ERROR message");
17}examples/doc_poly.rs (line 5)
4fn main() {
5 let mut stderr_log = StderrLogger::new(LevelFilter::Debug);
6 stderr_log.msg_format("{args}");
7
8 let mut file_log = FileLogger::new(LevelFilter::Info);
9 file_log.filename("./test.log");
10
11 let mut poly_log = PolyLogger::new();
12 poly_log.add(file_log.create()); // create() returns the GenLogger
13 poly_log.add(stderr_log);
14 poly_log.init().unwrap();
15
16 info!("This goes to both loggers");
17 debug!("This only goes to stderr");
18}examples/poly2.rs (line 7)
5fn main() {
6 // Create a few terminal loggers
7 let mut tl0 = StderrLogger::new(LevelFilter::Debug);
8 tl0.msg_format("TL0: {timestamp} - {level} - {args}");
9
10 let mut tl1 = StderrLogger::new(LevelFilter::Info);
11 tl1.msg_format("TL1: {timestamp} - {level} - {args}");
12
13 let mut tl2 = StderrLogger::new(LevelFilter::Warn);
14 tl2.msg_format("TL2: {timestamp} - {level} - {args}");
15
16 // Put one one terminal logger into one poly_logger
17 let mut pl0 = PolyLogger::new();
18 pl0.add(tl0);
19
20 // Put other terminal loggers into another poly_logger
21 let mut pl1 = PolyLogger::new();
22 pl1.add(tl1);
23 pl1.add(tl2);
24
25 // Put second poly_logger into the first poly_logger
26 // which is the one we actually register with the
27 // log system via init().
28 // Not sure if this would ever make sense, but hey...
29 pl0.add(pl1);
30 pl0.init().unwrap();
31
32 trace!("This is an TRACE message");
33 eprintln!("------------------------------");
34 debug!("This is a DEBUG message");
35 eprintln!("------------------------------");
36 info!("This is an INFO message");
37 eprintln!("------------------------------");
38 warn!("This is a WARN message");
39 eprintln!("------------------------------");
40 error!("This is an ERROR message");
41}examples/poly.rs (line 10)
5fn main() {
6 // Create some logger instances and run all through
7 // the PolyLogger
8
9 // Default format
10 let tl0 = StderrLogger::new(LevelFilter::Info);
11
12 // Custom format
13 let mut tl1 = StderrLogger::new(LevelFilter::Warn);
14 tl1.timestamp_format("%a %b %e %T %Y")
15 .msg_format("Custom: [{timestamp}] {level} [{file}:{line}] - {args}");
16
17 // Simpler format
18 let mut tl2 = StderrLogger::new(LevelFilter::Info);
19 tl2.msg_format("Simple1: {level} [{timestamp}] {args}")
20 .timestamp_format("%T");
21
22 // Even simpler
23 let mut tl3 = StderrLogger::new(LevelFilter::Debug);
24 tl3.msg_format("Simple2: {level} - {args}")
25 .timestamp_format("");
26
27 // Raw format to stdout
28 let mut tl4 = StdoutLogger::new(LevelFilter::Trace);
29 tl4.msg_format("{args}")
30 .timestamp_format("");
31
32 // File logger
33 let filename = "/tmp/file_logger.log";
34 let mut fl0 = FileLogger::new(LevelFilter::Info);
35 fl0.msg_format("Simple1: {level} [{timestamp}] {args}")
36 .timestamp_format("%T")
37 .filename(filename);
38 println!("Logging to {}", filename);
39
40 // Create the poly logger and add our logger instances
41 let mut pl = PolyLogger::new();
42 pl.add(tl0);
43 pl.add(tl1);
44 pl.add(tl2);
45 pl.add(tl3);
46 pl.add(tl4);
47 pl.add(fl0.create());
48 pl.init().unwrap();
49
50 trace!("This is an TRACE message");
51 eprintln!("------------------------------");
52 debug!("This is a DEBUG message");
53 eprintln!("------------------------------");
54 info!("This is an INFO message");
55 eprintln!("------------------------------");
56 warn!("This is a WARN message");
57 eprintln!("------------------------------");
58 error!("This is an ERROR message");
59}Auto Trait Implementations§
impl Freeze for StderrLogger
impl RefUnwindSafe for StderrLogger
impl Send for StderrLogger
impl Sync for StderrLogger
impl Unpin for StderrLogger
impl UnsafeUnpin for StderrLogger
impl UnwindSafe for StderrLogger
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