|
| 1 | +<a name="ex-log-custom"></a> |
| 2 | +## Log messages to a custom location |
| 3 | + |
| 4 | +[![log-badge]][log] [![log4rs-badge]][log4rs] [![cat-debugging-badge]][cat-debugging] |
| 5 | + |
| 6 | +Configures log to be output into custom location with [log4rs]. [log4rs] can use either an external YAML file or a programmatically constructed configuration. |
| 7 | + |
| 8 | +Firstly creates the log configuration with [`log4rs::append::file::FileAppender`] |
| 9 | +using a custom pattern from [`log4rs::encode::pattern`]. |
| 10 | + |
| 11 | +Secondly assigns it to the [`log4rs::config::Config`] which has a root appender that uses the previously created `logfile` appender. Subsequently sets the default [`log::LogLevelFilter`] so that any logs with `Info` level or higher will be sent to the logger. |
| 12 | + |
| 13 | +```rust,no_run |
| 14 | +# #[macro_use] |
| 15 | +# extern crate error_chain; |
| 16 | +#[macro_use] |
| 17 | +extern crate log; |
| 18 | +extern crate log4rs; |
| 19 | +
|
| 20 | +use log::LogLevelFilter; |
| 21 | +use log4rs::append::file::FileAppender; |
| 22 | +use log4rs::encode::pattern::PatternEncoder; |
| 23 | +use log4rs::config::{Appender, Config, Root}; |
| 24 | +# |
| 25 | +# error_chain! { |
| 26 | +# foreign_links { |
| 27 | +# Io(std::io::Error); |
| 28 | +# LogConfig(log4rs::config::Errors); |
| 29 | +# SetLogger(log::SetLoggerError); |
| 30 | +# } |
| 31 | +# } |
| 32 | +
|
| 33 | +fn run() -> Result<()> { |
| 34 | + let logfile = FileAppender::builder() |
| 35 | + .encoder(Box::new(PatternEncoder::new("{l} - {m}\n"))) |
| 36 | + .build("log/output.log")?; |
| 37 | +
|
| 38 | + let config = Config::builder() |
| 39 | + .appender(Appender::builder().build("logfile", Box::new(logfile))) |
| 40 | + .build(Root::builder() |
| 41 | + .appender("logfile") |
| 42 | + .build(LogLevelFilter::Info))?; |
| 43 | +
|
| 44 | + log4rs::init_config(config)?; |
| 45 | +
|
| 46 | + info!("Hello, world!"); |
| 47 | +
|
| 48 | + Ok(()) |
| 49 | +} |
| 50 | +# |
| 51 | +# quick_main!(run); |
| 52 | +``` |
| 53 | + |
| 54 | +[`log4rs::append::file::FileAppender`]: https://docs.rs/log4rs/*/log4rs/append/file/struct.FileAppender.html |
| 55 | +[`log4rs::config::Config`]: https://docs.rs/log4rs/*/log4rs/config/struct.Config.html |
| 56 | +[`log4rs::encode::pattern`]: https://docs.rs/log4rs/*/log4rs/encode/pattern/index.html |
| 57 | +[`log::LogLevelFilter`]: https://doc.rust-lang.org/log/log/enum.LogLevelFilter.html |
0 commit comments