pub struct StreamHandler<W: Write + Send> { /* private fields */ }Expand description
Implementations§
Source§impl<W: Write + Send> StreamHandler<W>
impl<W: Write + Send> StreamHandler<W>
Sourcepub fn new(formatter: Formatter, stream: W) -> Self
pub fn new(formatter: Formatter, stream: W) -> Self
Creates a handler from an explicit formatter and stream.
Examples found in repository?
examples/colorized.rs (line 56)
36fn main() {
37 // 1. Build a formatter from a pattern.
38 //
39 // `%(name)` is a field placeholder. A trailing spec like `-20` controls
40 // width/alignment: a leading `-` left-aligns, the number is the minimum
41 // width, and an optional `.N` truncates to N characters. So:
42 // %(level)-8 -> left-aligned, padded to 8 ("INFO ")
43 // %(name).12 -> truncated to at most 12 chars
44 let mut formatter = Formatter::new("%(timestamp) [%(level)-8] %(name)-12 | %(message)");
45
46 // 2. Customize the timestamp rendering (chrono's strftime syntax).
47 formatter.set_time_format("%Y-%m-%d %H:%M:%S");
48
49 // 3. Post-process every rendered line (here: add color).
50 formatter.set_transformer(colorize);
51
52 // 4. Configure the ROOT logger once. Every logger created afterwards
53 // inherits a snapshot of root's handlers and level, so you typically
54 // set things up here and then just `Logger::get(...)` everywhere else.
55 let root = Logger::root();
56 root.add_handler(StreamHandler::new(formatter, std::io::stdout()))
57 .expect("root handler lock should not be poisoned at startup");
58 root.set_level(Level::Debug); // emit everything Debug and above
59
60 // 5. Grab a named logger and emit one message per level.
61 let logger = Logger::get("quickstart");
62 logger.debug("a debug message (gray)");
63 logger.info("an info message (blue)");
64 logger.warning("a warning message (yellow)");
65 logger.error("an error message (red)");
66 logger.critical("a critical message (deep red)");
67
68 // 6. Levels below a logger's threshold are dropped cheaply (before
69 // formatting). Raise the bar and show that Debug/Info now vanish.
70 logger.set_level(Level::Warning);
71 logger.debug("you will NOT see this (below threshold)");
72 logger.info("you will NOT see this either");
73 logger.warning("but warnings still get through");
74}Sourcepub fn with_pattern(stream: W, pattern: &str) -> Self
pub fn with_pattern(stream: W, pattern: &str) -> Self
Convenience constructor that builds a Formatter from pattern.
Examples found in repository?
examples/quickstart.rs (lines 22-25)
14fn main() {
15 // Get a named logger from the global registry. Calling `get` with the same
16 // name again anywhere in the program returns the same logger.
17 let logger = Logger::get("basic");
18
19 // Attach a handler that writes to stdout using a simple pattern.
20 // `%(level)` and `%(message)` are field placeholders.
21 logger
22 .add_handler(StreamHandler::with_pattern(
23 std::io::stdout(),
24 "%(level): %(message)",
25 ))
26 .expect("handler lock should not be poisoned at startup");
27
28 // Emit a few messages. The default level is `Info`, so `debug` is dropped.
29 logger.info("hello from a named logger");
30 logger.warning("something to keep an eye on");
31 logger.error("something went wrong");
32}Trait Implementations§
Auto Trait Implementations§
impl<W> !Freeze for StreamHandler<W>
impl<W> !RefUnwindSafe for StreamHandler<W>
impl<W> !UnwindSafe for StreamHandler<W>
impl<W> Send for StreamHandler<W>
impl<W> Sync for StreamHandler<W>
impl<W> Unpin for StreamHandler<W>where
W: Unpin,
impl<W> UnsafeUnpin for StreamHandler<W>where
W: UnsafeUnpin,
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