From 23dcbc76a486371b1ff7463e5df394b16d38e14b Mon Sep 17 00:00:00 2001 From: Joel Galenson Date: Mon, 9 Aug 2021 10:28:22 -0700 Subject: Upgrade rust/crates/env_logger to 0.9.0 Test: make Change-Id: I94831d7462da63b65f7aa1378e5f9529161d1236 --- .cargo_vcs_info.json | 2 +- Android.bp | 24 +++++----- Cargo.toml | 2 +- Cargo.toml.orig | 2 +- METADATA | 8 ++-- src/filter/mod.rs | 4 +- src/fmt/mod.rs | 125 ++++++++++++++++++++++++++++++++++++++++++++++----- src/lib.rs | 44 ++++++++++++------ 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 io::Result<()> pub(crate) struct Builder { pub format_timestamp: Option, pub format_module_path: bool, + pub format_target: bool, pub format_level: bool, pub format_indent: Option, pub custom_format: Option, @@ -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, module_path: bool, + target: bool, level: bool, written_header_value: bool, indent: Option, @@ -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) -> &mut Self { -- cgit v1.2.3