aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Galenson <jgalenson@google.com>2021-08-16 08:24:15 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-08-16 08:24:15 +0000
commit7c8c5b79316f7e602ff5323c7adc3a146f71518b (patch)
tree963c235526a1c3f68e0e7ca2a3178a54d08c1a8a
parent2e5d4ac865ef105bdeaaf3873a374b6586d983d4 (diff)
parent955a2ee9a1b4216310a228015851445b9195a085 (diff)
downloadenv_logger-7c8c5b79316f7e602ff5323c7adc3a146f71518b.tar.gz
Upgrade rust/crates/env_logger to 0.9.0 am: 23dcbc76a4 am: 83c670bece am: 34227617c5 am: 9c45ea1b8a am: 955a2ee9a1
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/env_logger/+/1791029 Change-Id: I099ec36c69ad4a94291f79f22baf413a627e8b0d
-rw-r--r--.cargo_vcs_info.json2
-rw-r--r--Android.bp24
-rw-r--r--Cargo.toml2
-rw-r--r--Cargo.toml.orig2
-rw-r--r--METADATA8
-rw-r--r--src/filter/mod.rs4
-rw-r--r--src/fmt/mod.rs125
-rw-r--r--src/lib.rs44
8 files changed, 166 insertions, 45 deletions
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index 8469382..b5ebece 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
{
"git": {
- "sha1": "13cafce572362582f57964eae6cb4a41f52fd04a"
+ "sha1": "04856ac38baf422baebb40729cf51127a75b82ed"
}
}
diff --git a/Android.bp b/Android.bp
index f0acbab..a1563b0 100644
--- a/Android.bp
+++ b/Android.bp
@@ -38,7 +38,7 @@ license {
}
rust_defaults {
- name: "env_logger_defaults",
+ name: "env_logger_test_defaults",
crate_name: "env_logger",
srcs: ["src/lib.rs"],
test_suites: ["general-tests"],
@@ -51,7 +51,7 @@ rust_defaults {
rust_test_host {
name: "env_logger_host_test_src_lib",
- defaults: ["env_logger_defaults"],
+ defaults: ["env_logger_test_defaults"],
test_options: {
unit_test: true,
},
@@ -59,11 +59,11 @@ rust_test_host {
rust_test {
name: "env_logger_device_test_src_lib",
- defaults: ["env_logger_defaults"],
+ defaults: ["env_logger_test_defaults"],
}
rust_defaults {
- name: "env_logger_defaults_env_logger",
+ name: "env_logger_test_defaults_env_logger",
crate_name: "env_logger",
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -77,7 +77,7 @@ rust_defaults {
rust_test_host {
name: "env_logger_host_test_tests_init-twice-retains-filter",
- defaults: ["env_logger_defaults_env_logger"],
+ defaults: ["env_logger_test_defaults_env_logger"],
srcs: ["tests/init-twice-retains-filter.rs"],
test_options: {
unit_test: true,
@@ -86,13 +86,13 @@ rust_test_host {
rust_test {
name: "env_logger_device_test_tests_init-twice-retains-filter",
- defaults: ["env_logger_defaults_env_logger"],
+ defaults: ["env_logger_test_defaults_env_logger"],
srcs: ["tests/init-twice-retains-filter.rs"],
}
rust_test_host {
name: "env_logger_host_test_tests_log-in-log",
- defaults: ["env_logger_defaults_env_logger"],
+ defaults: ["env_logger_test_defaults_env_logger"],
srcs: ["tests/log-in-log.rs"],
test_options: {
unit_test: true,
@@ -101,13 +101,13 @@ rust_test_host {
rust_test {
name: "env_logger_device_test_tests_log-in-log",
- defaults: ["env_logger_defaults_env_logger"],
+ defaults: ["env_logger_test_defaults_env_logger"],
srcs: ["tests/log-in-log.rs"],
}
rust_test_host {
name: "env_logger_host_test_tests_log_tls_dtors",
- defaults: ["env_logger_defaults_env_logger"],
+ defaults: ["env_logger_test_defaults_env_logger"],
srcs: ["tests/log_tls_dtors.rs"],
test_options: {
unit_test: true,
@@ -116,13 +116,13 @@ rust_test_host {
rust_test {
name: "env_logger_device_test_tests_log_tls_dtors",
- defaults: ["env_logger_defaults_env_logger"],
+ defaults: ["env_logger_test_defaults_env_logger"],
srcs: ["tests/log_tls_dtors.rs"],
}
rust_test_host {
name: "env_logger_host_test_tests_regexp_filter",
- defaults: ["env_logger_defaults_env_logger"],
+ defaults: ["env_logger_test_defaults_env_logger"],
srcs: ["tests/regexp_filter.rs"],
test_options: {
unit_test: true,
@@ -131,7 +131,7 @@ rust_test_host {
rust_test {
name: "env_logger_device_test_tests_regexp_filter",
- defaults: ["env_logger_defaults_env_logger"],
+ defaults: ["env_logger_test_defaults_env_logger"],
srcs: ["tests/regexp_filter.rs"],
}
diff --git a/Cargo.toml b/Cargo.toml
index 56361f9..b91eddb 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,7 +13,7 @@
[package]
edition = "2018"
name = "env_logger"
-version = "0.8.4"
+version = "0.9.0"
authors = ["The Rust Project Developers"]
include = ["src/**/*", "tests", "LICENSE-*", "README.md", "CHANGELOG.md"]
description = "A logging implementation for `log` which is configured via an environment\nvariable.\n"
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index 3a3e176..29c77b3 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -1,7 +1,7 @@
[package]
name = "env_logger"
edition = "2018"
-version = "0.8.4"
+version = "0.9.0"
authors = ["The Rust Project Developers"]
license = "MIT/Apache-2.0"
readme = "README.md"
diff --git a/METADATA b/METADATA
index 2bcd175..07f72fc 100644
--- a/METADATA
+++ b/METADATA
@@ -7,13 +7,13 @@ third_party {
}
url {
type: ARCHIVE
- value: "https://static.crates.io/crates/env_logger/env_logger-0.8.4.crate"
+ value: "https://static.crates.io/crates/env_logger/env_logger-0.9.0.crate"
}
- version: "0.8.4"
+ version: "0.9.0"
license_type: NOTICE
last_upgrade_date {
year: 2021
- month: 6
- day: 21
+ month: 8
+ day: 9
}
}
diff --git a/src/filter/mod.rs b/src/filter/mod.rs
index 7ef3f39..9ebeab0 100644
--- a/src/filter/mod.rs
+++ b/src/filter/mod.rs
@@ -238,7 +238,7 @@ impl Builder {
});
} else {
// Consume map of directives.
- let directives_map = mem::replace(&mut self.directives, HashMap::new());
+ let directives_map = mem::take(&mut self.directives);
directives = directives_map
.into_iter()
.map(|(name, level)| Directive { name, level })
@@ -253,7 +253,7 @@ impl Builder {
}
Filter {
- directives: mem::replace(&mut directives, Vec::new()),
+ directives: mem::take(&mut directives),
filter: mem::replace(&mut self.filter, None),
}
}
diff --git a/src/fmt/mod.rs b/src/fmt/mod.rs
index 3c4fee0..21e0957 100644
--- a/src/fmt/mod.rs
+++ b/src/fmt/mod.rs
@@ -141,6 +141,7 @@ pub(crate) type FormatFn = Box<dyn Fn(&mut Formatter, &Record) -> io::Result<()>
pub(crate) struct Builder {
pub format_timestamp: Option<TimestampPrecision>,
pub format_module_path: bool,
+ pub format_target: bool,
pub format_level: bool,
pub format_indent: Option<usize>,
pub custom_format: Option<FormatFn>,
@@ -152,7 +153,8 @@ impl Default for Builder {
fn default() -> Self {
Builder {
format_timestamp: Some(Default::default()),
- format_module_path: true,
+ format_module_path: false,
+ format_target: true,
format_level: true,
format_indent: Some(4),
custom_format: None,
@@ -186,6 +188,7 @@ impl Builder {
let fmt = DefaultFormat {
timestamp: built.format_timestamp,
module_path: built.format_module_path,
+ target: built.format_target,
level: built.format_level,
written_header_value: false,
indent: built.format_indent,
@@ -210,6 +213,7 @@ type SubtleStyle = &'static str;
struct DefaultFormat<'a> {
timestamp: Option<TimestampPrecision>,
module_path: bool,
+ target: bool,
level: bool,
written_header_value: bool,
indent: Option<usize>,
@@ -222,6 +226,7 @@ impl<'a> DefaultFormat<'a> {
self.write_timestamp()?;
self.write_level(record)?;
self.write_module_path(record)?;
+ self.write_target(record)?;
self.finish_header()?;
self.write_args(record)
@@ -311,6 +316,17 @@ impl<'a> DefaultFormat<'a> {
}
}
+ fn write_target(&mut self, record: &Record) -> io::Result<()> {
+ if !self.target {
+ return Ok(());
+ }
+
+ match record.target() {
+ "" => Ok(()),
+ target => self.write_header_value(target),
+ }
+ }
+
fn finish_header(&mut self) -> io::Result<()> {
if self.written_header_value {
let close_brace = self.subtle_style("]");
@@ -381,23 +397,33 @@ mod tests {
use log::{Level, Record};
- fn write(fmt: DefaultFormat) -> String {
+ fn write_record(record: Record, fmt: DefaultFormat) -> String {
let buf = fmt.buf.buf.clone();
- let record = Record::builder()
- .args(format_args!("log\nmessage"))
- .level(Level::Info)
- .file(Some("test.rs"))
- .line(Some(144))
- .module_path(Some("test::path"))
- .build();
-
fmt.write(&record).expect("failed to write record");
let buf = buf.borrow();
String::from_utf8(buf.bytes().to_vec()).expect("failed to read record")
}
+ fn write_target<'a>(target: &'a str, fmt: DefaultFormat) -> String {
+ write_record(
+ Record::builder()
+ .args(format_args!("log\nmessage"))
+ .level(Level::Info)
+ .file(Some("test.rs"))
+ .line(Some(144))
+ .module_path(Some("test::path"))
+ .target(target)
+ .build(),
+ fmt,
+ )
+ }
+
+ fn write(fmt: DefaultFormat) -> String {
+ write_target("", fmt)
+ }
+
#[test]
fn format_with_header() {
let writer = writer::Builder::new()
@@ -409,6 +435,7 @@ mod tests {
let written = write(DefaultFormat {
timestamp: None,
module_path: true,
+ target: false,
level: true,
written_header_value: false,
indent: None,
@@ -430,6 +457,7 @@ mod tests {
let written = write(DefaultFormat {
timestamp: None,
module_path: false,
+ target: false,
level: false,
written_header_value: false,
indent: None,
@@ -451,6 +479,7 @@ mod tests {
let written = write(DefaultFormat {
timestamp: None,
module_path: true,
+ target: false,
level: true,
written_header_value: false,
indent: Some(4),
@@ -472,6 +501,7 @@ mod tests {
let written = write(DefaultFormat {
timestamp: None,
module_path: true,
+ target: false,
level: true,
written_header_value: false,
indent: Some(0),
@@ -493,6 +523,7 @@ mod tests {
let written = write(DefaultFormat {
timestamp: None,
module_path: false,
+ target: false,
level: false,
written_header_value: false,
indent: Some(4),
@@ -514,6 +545,7 @@ mod tests {
let written = write(DefaultFormat {
timestamp: None,
module_path: false,
+ target: false,
level: false,
written_header_value: false,
indent: None,
@@ -535,6 +567,7 @@ mod tests {
let written = write(DefaultFormat {
timestamp: None,
module_path: false,
+ target: false,
level: false,
written_header_value: false,
indent: Some(4),
@@ -544,4 +577,76 @@ mod tests {
assert_eq!("log\n\n message\n\n", written);
}
+
+ #[test]
+ fn format_target() {
+ let writer = writer::Builder::new()
+ .write_style(WriteStyle::Never)
+ .build();
+
+ let mut f = Formatter::new(&writer);
+
+ let written = write_target(
+ "target",
+ DefaultFormat {
+ timestamp: None,
+ module_path: true,
+ target: true,
+ level: true,
+ written_header_value: false,
+ indent: None,
+ suffix: "\n",
+ buf: &mut f,
+ },
+ );
+
+ assert_eq!("[INFO test::path target] log\nmessage\n", written);
+ }
+
+ #[test]
+ fn format_empty_target() {
+ let writer = writer::Builder::new()
+ .write_style(WriteStyle::Never)
+ .build();
+
+ let mut f = Formatter::new(&writer);
+
+ let written = write(DefaultFormat {
+ timestamp: None,
+ module_path: true,
+ target: true,
+ level: true,
+ written_header_value: false,
+ indent: None,
+ suffix: "\n",
+ buf: &mut f,
+ });
+
+ assert_eq!("[INFO test::path] log\nmessage\n", written);
+ }
+
+ #[test]
+ fn format_no_target() {
+ let writer = writer::Builder::new()
+ .write_style(WriteStyle::Never)
+ .build();
+
+ let mut f = Formatter::new(&writer);
+
+ let written = write_target(
+ "target",
+ DefaultFormat {
+ timestamp: None,
+ module_path: true,
+ target: false,
+ level: true,
+ written_header_value: false,
+ indent: None,
+ suffix: "\n",
+ buf: &mut f,
+ },
+ );
+
+ assert_eq!("[INFO test::path] log\nmessage\n", written);
+ }
}
diff --git a/src/lib.rs b/src/lib.rs
index 6a77266..8504108 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -97,28 +97,38 @@
//! directives*. A logging directive is of the form:
//!
//! ```text
-//! path::to::module=level
+//! example::log::target=level
//! ```
//!
-//! The path to the module is rooted in the name of the crate it was compiled
-//! for, so if your program is contained in a file `hello.rs`, for example, to
-//! turn on logging for this file you would use a value of `RUST_LOG=hello`.
-//! Furthermore, this path is a prefix-search, so all modules nested in the
-//! specified module will also have logging enabled.
+//! The log target is typically equal to the path of the module the message
+//! in question originated from, though it can be overriden.
+//!
+//! The path is rooted in the name of the crate it was compiled for, so if
+//! your program is in a file called, for example, `hello.rs`, the path would
+//! simply be be `hello`.
+//!
+//! Furthermore, the the log can be filtered using prefix-search based on the
+//! specified log target. A value of, for example, `RUST_LOG=example`, would
+//! match all of the messages with targets:
+//!
+//! * `example`
+//! * `example::test`
+//! * `example::test::module::submodule`
+//! * `examples::and_more_examples`
//!
//! When providing the crate name or a module path, explicitly specifying the
-//! log level is optional. If omitted, all logging for the item (and its
-//! children) will be enabled.
+//! log level is optional. If omitted, all logging for the item will be
+//! enabled.
//!
//! The names of the log levels that may be specified correspond to the
//! variations of the [`log::Level`][level-enum] enum from the `log`
//! crate. They are:
//!
-//! * `error`
-//! * `warn`
-//! * `info`
-//! * `debug`
-//! * `trace`
+//! * `error`
+//! * `warn`
+//! * `info`
+//! * `debug`
+//! * `trace`
//!
//! There is also a pseudo logging level, `off`, which may be specified to
//! disable all logging for a given module or for the entire application. As
@@ -260,7 +270,7 @@
//! env_logger::Builder::from_env(Env::default().default_filter_or("warn")).init();
//! ```
//!
-//! [gh-repo-examples]: https://github.com/env-logger-rs/env_logger/tree/master/examples
+//! [gh-repo-examples]: https://github.com/env-logger-rs/env_logger/tree/main/examples
//! [level-enum]: https://docs.rs/log/latest/log/enum.Level.html
//! [log-crate-url]: https://docs.rs/log/
//! [`Builder`]: struct.Builder.html
@@ -598,6 +608,12 @@ impl Builder {
self
}
+ /// Whether or not to write the target in the default format.
+ pub fn format_target(&mut self, write: bool) -> &mut Self {
+ self.format.format_target = write;
+ self
+ }
+
/// Configures the amount of spaces to use to indent multiline log records.
/// A value of `None` disables any kind of indentation.
pub fn format_indent(&mut self, indent: Option<usize>) -> &mut Self {