Skip to content

Releases: rust-cli/env_logger

0.5.3

21 Jan 01:11
b7c4626
Compare
Choose a tag to compare

Key Changes

  • Support more intense variants of color using intensity. Call set_intense(true) to produce a lighter color, and set_intense(false) to produce the default color.

Contributions

0.5.2

19 Jan 06:17
5e10f66
Compare
Choose a tag to compare

Key Changes

  • Detect whether stdout/stderr is a tty and write styles accordingly. This fixes an issue with color control characters showing up logs piped to files

New Dependencies

  • atty for interrogating stdout/stderr

Contributions

0.5.1

17 Jan 21:22
d8cdb6e
Compare
Choose a tag to compare

Key Changes

  • Fixed a panic in some rare logging cases and updated some incorrect sample code in the readme

Contributions

0.5.0

17 Jan 21:19
1908978
Compare
Choose a tag to compare

NOTE: These release notes are collected from the 0.5.0-rc.1 and 0.5.0-rc.2 release notes.

Key Changes

  • Support for using custom environment variables to parse the log level filter and color output
  • Added colors with configuration through an environment variable and an RFC3339-formatted timestamp to the default format
  • Buffer log output so logs over multiple lines won't end up interleaved in multi-threaded applications
  • Move the filter parsing into its own module so it's easier to consume in custom loggers
  • Documentation!

Breaking Changes

  • LogTarget has been renamed to Target
  • LogBuilder has been renamed to Builder
  • The Builder::format method now accepts a F: Fn(&mut Formatter, &Record) -> Result<()> + Sync + Send. This is the new formatting API that writes into a Formatter instead of producing an owned String
  • Builder::init will panic if the logger can't be initialised. A new Builder::try_init method has been added with the same semantics as the old Builder::init method

New Dependencies

Contributions

Thanks to everybody who helped make this release of env_logger happen!

More Details

Disabling colors

Adds a new builder property for whether or not to include colors. By default this is controlled by the RUST_LOG_STYLE environment variable, but it can be overridden.

Setting this environment variable to never will disable colors and other styles:

$ export RUST_LOG_STYLE=never
$ ./my-app

Valid values are:

  • auto (or missing/invalid) will decide whether or not the terminal supports colors
  • always will always use colors
  • never will never use colors

In order to support multiple environment variables, I've refactored our from_env functions to accept a generic T: Into<Env>, where Env is a container for the environment variables we care about. These methods can now be called in a few ways:

// reads filters from `MY_LOG` and styles from `RUST_LOG_STYLE`
env_logger::init_from_env("MY_LOG");

// reads filters from `MY_LOG` and styles from `MY_LOG_STYLE`
env_logger::init_from_env(Env::default().filter("MY_LOG").write_style("MY_LOG_STYLE"));

This lets us add new environment variables in the future without potentially breaking people. But it does mean if you're overriding all environment variables that new ones could slip in without you noticing.

Using alternative environment variables

Since we use two environment variables to configure the logger we need an ergonomic way to pass different combinations of those variables to from_env methods. This PR adds an Env type with builder methods for naming environment variables:

env_logger::init_from_env(Env::new().filter("MY_LOG"));

With a few From conversions, the above is also equivalent to:

env_logger::init_from_env("MY_LOG");

Whether or not we want to keep these conversions is up for discussion.

Writing colors

The color API has been refactored and made public so you can use them in your own formats:

let mut style = buf.style();

style.set_color(Color::Red).set_bold(true).set_bg(Color::White);

writeln!(buf, "{}", style.value(42))

This saves you from having to split the writes into multiple calls and juggle Result types.

Writing timestamps

Call the timestamp method on a Formatter to get an opaque timestamp that can be logged. It'll be written in an RFC3339 format:

let ts = buf.timestamp();

writeline!(buf, "log at: {}", ts)

0.5.0-rc.2

10 Jan 22:08
30527aa
Compare
Choose a tag to compare
0.5.0-rc.2 Pre-release
Pre-release

Key Changes

  • Make the color API public
  • Tweak the log format to be more aligned

Contributions

More Details

Disabling colors

Adds a new builder property for whether or not to include colors. By default this is RUST_LOG_STYLE, but it can be overridden.

Setting this environment variable to never will disable colors and other styles:

$ export RUST_LOG_STYLE=never
$ ./my-app

Valid values are:

  • auto (or missing/invalid) will decide whether or not the terminal supports colors
  • always will always use colors
  • never will never use colors

In order to support multiple environment variables, I've refactored our from_env functions to accept a generic T: Into<Env>, where Env is a container for the environment variables we care about. These methods can now be called in a few ways:

// reads filters from `MY_LOG` and styles from `RUST_LOG_STYLE`
env_logger::init_from_env("MY_LOG");

// reads filters from `MY_LOG` and styles from `MY_LOG_STYLE`
env_logger::init_from_env(Env::default().filter("MY_LOG").write_style("MY_LOG_STYLE"));

This lets us add new environment variables in the future without potentially breaking people. But it does mean if you're overriding all environment variables that new ones could slip in without you noticing.

Using alternative environment variables

Since we use two environment variables to configure the logger we need an ergonomic way to pass different combinations of those variables to from_env methods. This PR adds an Env type with builder methods for naming environment variables:

env_logger::init_from_env(Env::new().filter("MY_LOG"));

With a few From conversions, the above is also equivalent to:

env_logger::init_from_env("MY_LOG");

Whether or not we want to keep these conversions is up for discussion.

Writing colors

The color API has been refactored and made public so you can use them in your own formats:

let mut style = buf.style();

style.set_color(Color::Red).set_bold(true).set_bg(Color::White);

writeln!(buf, "{}", style.value(42))

This saves you from having to split the writes into multiple calls and juggle Result types.

Writing timestamps

Oh the Formatter.timestamp method is now also public so you can grab timestamps.

0.5.0-rc.1

07 Dec 06:21
Compare
Choose a tag to compare
0.5.0-rc.1 Pre-release
Pre-release

Key changes

  • Support for using custom environment variables to parse the log level filter
  • Added colors and an RFC3339-formatted timestamp to the default format
  • Buffer log output so logs over multiple lines won't end up interleaved in multi-threaded applications
  • Move the filter parsing into its own module so it's easier to consume in custom loggers
  • Documentation!

Breaking changes

  • LogTarget has been renamed to Target
  • LogBuilder has been renamed to Builder
  • The Builder::format method now accepts a F: Fn(&mut Formatter, &Record) -> Result<()> + Sync + Send. This is the new formatting API that writes into a Formatter instead of producing an owned String
  • Builder::init will panic if the logger can't be initialised. A new Builder::try_init method has been added with the same semantics as the old Builder::init method

Contributions

Thanks to everybody who helped make this release of env_logger happen!

New dependencies