1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
//! Describes how to extend `flexi_logger` with additional log writers.
//!
//! The module also contains two ready-to-use log writers,
//! one for writing to files ([`FileLogWriter`]), one for writing to the syslog ([`SyslogWriter`]).
//!
//! Log writers can be used in two ways:
//!
//! * _Default output channel:_ <br>
//! You can influence to which output stream normal log messages will be written,
//! i.e. those from log macro calls without explicit target specification
//! (like in `log::error!("File not found")`).
//!
//! With one of the methods
//!
//! * [`Logger::log_to_stderr`](crate::Logger::log_to_stderr) (default)
//! * [`Logger::log_to_stdout`](crate::Logger::log_to_stdout)
//! * [`Logger::log_to_file`](crate::Logger::log_to_file)
//! * [`Logger::log_to_writer`](crate::Logger::log_to_writer)
//! * [`Logger::log_to_file_and_writer`](crate::Logger::log_to_file_and_writer)
//! * [`Logger::do_not_log`](crate::Logger::do_not_log)
//!
//! you can change the default output channel. The fourth and the fifth of these methods
//! take log writers as input. See their documentation for more details.
//!
//! Messages will only be written to the default output channel
//! if they match the current [log specification](crate::LogSpecification).
//!
//! <br>
//!
//! * _Additional output channels:_ <br>
//! You can register additional log writers under a _target name_ with
//! [`Logger::add_writer()`](crate::Logger::add_writer), and address these log writers by
//! specifying the _target name_ in calls to the
//! [log macros](https://docs.rs/log/latest/log/macro.log.html).
//!
//! The message of a log call with a _target value_ that has the form `{Name1,Name2,...}`, i.e.,
//! a comma-separated list of _target names_, within braces, is not sent to the default output
//! channel, but to the loggers specified explicitly in the list. In such a list
//! you can also specify the default output channel with the built-in target name `_Default`.
//!
//! Log calls that are directed to an additional output channel will not be affected by
//! the value of `flexi_logger`'s log specification;
//! they will always be handed over to the respective `LogWriter`,
//! as you might want it for alerts or auditing.
//!
//! In the following example we define an alert writer, and a macro to facilitate using it
//! (and avoid using the explicit target specification in the macro call), and
//! show some example calls.
//!
//! ```rust
//! use log::*;
//!
//! use flexi_logger::{FileSpec,Logger};
//! use flexi_logger::writers::FileLogWriter;
//!
//! // Configure a FileLogWriter for alert messages
//! pub fn alert_logger() -> Box<FileLogWriter> {
//! Box::new(FileLogWriter::builder(
//! FileSpec::default()
//! # .directory("log_files/writers_mod_docu")
//! .discriminant("Alert")
//! .suffix("alerts")
//! )
//! .print_message()
//! .try_build()
//! .unwrap())
//! }
//!
//! // Define a macro for writing messages to the alert log and to the normal log
//! #[macro_use]
//! mod macros {
//! #[macro_export]
//! macro_rules! alert_error {
//! ($($arg:tt)*) => (
//! error!(target: "{Alert,_Default}", $($arg)*);
//! )
//! }
//! }
//!
//! fn main() {
//! Logger::try_with_env_or_str("info")
//! .expect("LogSpecification String has errors")
//! .print_message()
//! .log_to_file(FileSpec::default())
//! # .log_to_file(FileSpec::default().directory("log_files/writers_mod_docu"))
//! .add_writer("Alert", alert_logger())
//! .start()
//! .unwrap_or_else(|e| panic!("Logger initialization failed with {}", e));
//!
//!
//! // Explicitly send logs to different loggers
//! error!(target : "{Alert}", "This is only an alert");
//! error!(target : "{Alert,_Default}", "This is an alert and log message");
//!
//! // Nicer: use the explicit macro
//! alert_error!("This is another alert and log message");
//!
//! // Standard log macros write only to the normal log
//! error!("This is a normal error message");
//! warn!("This is a warning");
//! info!("This is an info message");
//! debug!("This is a debug message - you will not see it");
//! trace!("This is a trace message - you will not see it");
//! }
//!
//! ```
//!
pub use BufferWriter;
pub use Snapshot;
pub
pub use ;
pub use ;
pub use AsAny;
pub use LogWriter;