|
18 | 18 | //! # extern crate pretty_env_logger;
|
19 | 19 | //! let mut log_builder = pretty_env_logger::formatted_builder().unwrap();
|
20 | 20 | //! log_builder.parse("info"); // or env::var("RUST_LOG")
|
21 |
| -//! sentry::integrations::log::init(Some( |
22 |
| -//! Box::new(log_builder.build())), Default::default()); |
| 21 | +//! let logger = log_builder.build(); |
| 22 | +//! let options = sentry::integrations::log::LoggerOptions { |
| 23 | +//! global_filter: Some(logger.filter()), |
| 24 | +//! ..Default::default() |
| 25 | +//! }; |
| 26 | +//! sentry::integrations::log::init(Some(Box::new(logger)), options); |
23 | 27 | //! ```
|
| 28 | +//! |
| 29 | +//! For loggers based on `env_logger` (like `pretty_env_logger`) you can also |
| 30 | +//! use the [`env_logger`](../env_logger/index.html) integration which is |
| 31 | +//! much easier to use. |
24 | 32 | use log;
|
25 | 33 |
|
26 | 34 | use api::add_breadcrumb;
|
@@ -52,6 +60,25 @@ impl Default for LoggerOptions {
|
52 | 60 | }
|
53 | 61 | }
|
54 | 62 |
|
| 63 | +impl LoggerOptions { |
| 64 | + /// Returns the effective global filter. |
| 65 | + /// |
| 66 | + /// This is what is set for these logger options when the log level |
| 67 | + /// needs to be set globally. This is the greater of `global_filter` |
| 68 | + /// and `filter`. |
| 69 | + fn effective_global_filter(&self) -> log::LevelFilter { |
| 70 | + if let Some(filter) = self.global_filter { |
| 71 | + if filter < self.filter { |
| 72 | + self.filter |
| 73 | + } else { |
| 74 | + filter |
| 75 | + } |
| 76 | + } else { |
| 77 | + self.filter |
| 78 | + } |
| 79 | + } |
| 80 | +} |
| 81 | + |
55 | 82 | /// Provides a dispatching logger.
|
56 | 83 | pub struct Logger {
|
57 | 84 | dest: Option<Box<log::Log>>,
|
@@ -170,14 +197,20 @@ fn convert_log_level(level: log::Level) -> Level {
|
170 | 197 | /// use env_logger;
|
171 | 198 | ///
|
172 | 199 | /// let builder = env_logger::Builder::from_default_env();
|
173 |
| -/// log::init(Some(Box::new(builder.build())), Default::default()); |
| 200 | +/// let logger = builder.build(); |
| 201 | +/// log::init(Some(Box::new(builder.build())), LoggerOptions { |
| 202 | +/// global_filter: Some(logger.filter()), |
| 203 | +/// ..Default::default() |
| 204 | +/// }); |
174 | 205 | /// ```
|
| 206 | +/// |
| 207 | +/// (For using `env_logger` you can also use the `env_logger` integration |
| 208 | +/// which simplifies this). |
175 | 209 | pub fn init(dest: Option<Box<log::Log>>, options: LoggerOptions) {
|
176 | 210 | let logger = Logger::new(dest, options);
|
177 |
| - if let Some(filter) = logger.options().global_filter { |
| 211 | + let filter = logger.options().effective_global_filter(); |
| 212 | + if filter > log::max_level() { |
178 | 213 | log::set_max_level(filter);
|
179 |
| - } else { |
180 |
| - log::set_max_level(logger.options().filter); |
181 | 214 | }
|
182 | 215 | log::set_boxed_logger(Box::new(logger)).unwrap();
|
183 | 216 | }
|
0 commit comments