Skip to content

Commit 8a25d54

Browse files
committed
Add ability to configure before applying env
Add `parse_env` and `parse_default_env` methods to the `Builder`, which do the same as `from_env` and `from_default_env`, but on an existing builder. This allows a builder to be pre-configured/obtained in another fashion (e.g. through the [pretty_env_logger] crate), and then have the environment applied and override the configuration. [pretty_env_logger]: https://github.com/seanmonstar/pretty-env-logger Signed-off-by: Fabian Schuiki <[email protected]>
1 parent 68a1700 commit 8a25d54

File tree

1 file changed

+73
-3
lines changed

1 file changed

+73
-3
lines changed

src/lib.rs

Lines changed: 73 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -412,17 +412,61 @@ impl Builder {
412412
E: Into<Env<'a>>,
413413
{
414414
let mut builder = Builder::new();
415+
builder.parse_env(env);
416+
builder
417+
}
418+
419+
/// Applies the configuration from the environment.
420+
///
421+
/// This function allows a builder to be configured with default parameters,
422+
/// to be then overridden by the environment.
423+
///
424+
/// # Examples
425+
///
426+
/// Initialise a logger with filter level `Off`, then override the log
427+
/// filter from an environment variable called `MY_LOG`:
428+
///
429+
/// ```
430+
/// use log::LevelFilter;
431+
/// use env_logger::Builder;
432+
///
433+
/// let mut builder = Builder::new();
434+
///
435+
/// builder.filter_level(LevelFilter::Off);
436+
/// builder.parse_env("MY_LOG");
437+
/// builder.init();
438+
/// ```
439+
///
440+
/// Initialise a logger with filter level `Off`, then use the `MY_LOG`
441+
/// variable to override filtering and `MY_LOG_STYLE` to override whether
442+
/// or not to write styles:
443+
///
444+
/// ```
445+
/// use log::LevelFilter;
446+
/// use env_logger::{Builder, Env};
447+
///
448+
/// let env = Env::new().filter("MY_LOG").write_style("MY_LOG_STYLE");
449+
///
450+
/// let mut builder = Builder::new();
451+
/// builder.filter_level(LevelFilter::Off);
452+
/// builder.parse_env(env);
453+
/// builder.init();
454+
/// ```
455+
pub fn parse_env<'a, E>(&mut self, env: E) -> &mut Self
456+
where
457+
E: Into<Env<'a>>,
458+
{
415459
let env = env.into();
416460

417461
if let Some(s) = env.get_filter() {
418-
builder.parse_filters(&s);
462+
self.parse_filters(&s);
419463
}
420464

421465
if let Some(s) = env.get_write_style() {
422-
builder.parse_write_style(&s);
466+
self.parse_write_style(&s);
423467
}
424468

425-
builder
469+
self
426470
}
427471

428472
/// Initializes the log builder from the environment using default variable names.
@@ -447,6 +491,32 @@ impl Builder {
447491
Self::from_env(Env::default())
448492
}
449493

494+
/// Applies the configuration from the environment using default variable names.
495+
///
496+
/// This method is a convenient way to call `parse_env(Env::default())` without
497+
/// having to use the `Env` type explicitly. The builder will use the
498+
/// [default environment variables].
499+
///
500+
/// # Examples
501+
///
502+
/// Initialise a logger with filter level `Off`, then configure it using the
503+
/// default environment variables:
504+
///
505+
/// ```
506+
/// use log::LevelFilter;
507+
/// use env_logger::Builder;
508+
///
509+
/// let mut builder = Builder::new();
510+
/// builder.filter_level(LevelFilter::Off);
511+
/// builder.parse_default_env();
512+
/// builder.init();
513+
/// ```
514+
///
515+
/// [default environment variables]: struct.Env.html#default-environment-variables
516+
pub fn parse_default_env(&mut self) -> &mut Self {
517+
self.parse_env(Env::default())
518+
}
519+
450520
/// Sets the format function for formatting the log output.
451521
///
452522
/// This function is called on each record logged and should format the

0 commit comments

Comments
 (0)