Add Rust tracing crate usage

Related to https://github.com/ostreedev/ostree-rs-ext/pull/21
And inspired by seeing some discussion around the
https://crates.io/crates/tracing
crate.
This commit is contained in:
Colin Walters 2021-04-27 14:48:25 -04:00
parent 178e2200e9
commit b2c8c0fba6
4 changed files with 175 additions and 1 deletions

163
Cargo.lock generated
View File

@ -6,6 +6,15 @@ version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e"
[[package]]
name = "aho-corasick"
version = "0.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
dependencies = [
"memchr",
]
[[package]] [[package]]
name = "ansi_term" name = "ansi_term"
version = "0.11.0" version = "0.11.0"
@ -15,6 +24,15 @@ dependencies = [
"winapi", "winapi",
] ]
[[package]]
name = "ansi_term"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
dependencies = [
"winapi",
]
[[package]] [[package]]
name = "anyhow" name = "anyhow"
version = "1.0.40" version = "1.0.40"
@ -56,6 +74,12 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6cf89846ef2b2674ef1c153256cec98fba587c72bf4ea2c4b2f6d91a19f55926" checksum = "6cf89846ef2b2674ef1c153256cec98fba587c72bf4ea2c4b2f6d91a19f55926"
[[package]]
name = "byteorder"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]] [[package]]
name = "c_utf8" name = "c_utf8"
version = "0.1.0" version = "0.1.0"
@ -118,7 +142,7 @@ version = "2.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
dependencies = [ dependencies = [
"ansi_term", "ansi_term 0.11.0",
"atty", "atty",
"bitflags", "bitflags",
"strsim", "strsim",
@ -324,6 +348,19 @@ version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
[[package]]
name = "env_logger"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17392a012ea30ef05a610aa97dfb49496e71c9f676b27879922ea5bdf60d9d3f"
dependencies = [
"atty",
"humantime",
"log",
"regex",
"termcolor",
]
[[package]] [[package]]
name = "envsubst" name = "envsubst"
version = "0.2.0" version = "0.2.0"
@ -658,6 +695,12 @@ version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]]
name = "humantime"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]] [[package]]
name = "indicatif" name = "indicatif"
version = "0.15.0" version = "0.15.0"
@ -780,6 +823,15 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
[[package]]
name = "matchers"
version = "0.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1"
dependencies = [
"regex-automata",
]
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.3.4" version = "2.3.4"
@ -1307,6 +1359,19 @@ version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a"
dependencies = [ dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
"thread_local",
]
[[package]]
name = "regex-automata"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4"
dependencies = [
"byteorder",
"regex-syntax", "regex-syntax",
] ]
@ -1345,6 +1410,7 @@ dependencies = [
"clap", "clap",
"curl", "curl",
"cxx", "cxx",
"env_logger",
"envsubst", "envsubst",
"fn-error-context", "fn-error-context",
"gio", "gio",
@ -1381,6 +1447,8 @@ dependencies = [
"system-deps 3.1.1", "system-deps 3.1.1",
"systemd", "systemd",
"tempfile", "tempfile",
"tracing",
"tracing-subscriber",
] ]
[[package]] [[package]]
@ -1464,6 +1532,15 @@ dependencies = [
"yaml-rust", "yaml-rust",
] ]
[[package]]
name = "sharded-slab"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79c719719ee05df97490f80a45acfc99e5a30ce98a1e4fb67aee422745ae14e3"
dependencies = [
"lazy_static",
]
[[package]] [[package]]
name = "siphasher" name = "siphasher"
version = "0.3.3" version = "0.3.3"
@ -1700,6 +1777,15 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "thread_local"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd"
dependencies = [
"once_cell",
]
[[package]] [[package]]
name = "time" name = "time"
version = "0.1.44" version = "0.1.44"
@ -1720,6 +1806,81 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "tracing"
version = "0.1.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f"
dependencies = [
"cfg-if 1.0.0",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
]
[[package]]
name = "tracing-attributes"
version = "0.1.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c42e6fa53307c8a17e4ccd4dc81cf5ec38db9209f59b222210375b54ee40d1e2"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tracing-core"
version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f"
dependencies = [
"lazy_static",
]
[[package]]
name = "tracing-log"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3"
dependencies = [
"lazy_static",
"log",
"tracing-core",
]
[[package]]
name = "tracing-serde"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb65ea441fbb84f9f6748fd496cf7f63ec9af5bca94dd86456978d055e8eb28b"
dependencies = [
"serde",
"tracing-core",
]
[[package]]
name = "tracing-subscriber"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "705096c6f83bf68ea5d357a6aa01829ddbdac531b357b45abeca842938085baa"
dependencies = [
"ansi_term 0.12.1",
"chrono",
"lazy_static",
"matchers",
"regex",
"serde",
"serde_json",
"sharded-slab",
"smallvec",
"thread_local",
"tracing",
"tracing-core",
"tracing-log",
"tracing-serde",
]
[[package]] [[package]]
name = "unicode-segmentation" name = "unicode-segmentation"
version = "1.7.1" version = "1.7.1"

View File

@ -32,6 +32,7 @@ clap = "2.33.3"
curl = "0.4.36" curl = "0.4.36"
cxx = "1.0.46" cxx = "1.0.46"
envsubst = "0.2.0" envsubst = "0.2.0"
env_logger = "0.8.3"
fn-error-context = "0.1.2" fn-error-context = "0.1.2"
gio = "0.9.1" gio = "0.9.1"
gio-sys = "0.10.1" gio-sys = "0.10.1"
@ -66,6 +67,8 @@ structopt = "0.3.21"
subprocess = "0.2.6" subprocess = "0.2.6"
systemd = "0.8.2" systemd = "0.8.2"
tempfile = "3.2.0" tempfile = "3.2.0"
tracing = "0.1"
tracing-subscriber = "0.2"
[build-dependencies] [build-dependencies]
anyhow = "1.0" anyhow = "1.0"

View File

@ -23,6 +23,13 @@ fn main() {
// Call this early on; it invokes e.g. setenv() so must be done // Call this early on; it invokes e.g. setenv() so must be done
// before we create threads. // before we create threads.
rpmostree_rust::ffi::early_main(); rpmostree_rust::ffi::early_main();
// We need to write to stderr, because some of our commands write to stdout
// like `rpm-ostree compose tree --print-json`.
tracing_subscriber::fmt::fmt()
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
.with_writer(std::io::stderr)
.init();
tracing::trace!("starting");
// Gather our arguments. // Gather our arguments.
let args: Vec<String> = std::env::args().collect(); let args: Vec<String> = std::env::args().collect();
let args: Vec<&str> = args.iter().map(|s| s.as_str()).collect(); let args: Vec<&str> = args.iter().map(|s| s.as_str()).collect();

View File

@ -34,6 +34,7 @@ use std::os::unix::io::{AsRawFd, RawFd};
use std::path::Path; use std::path::Path;
use std::pin::Pin; use std::pin::Pin;
use std::{collections, fs, io}; use std::{collections, fs, io};
use tracing::{event, instrument, Level};
use crate::utils; use crate::utils;
@ -455,6 +456,7 @@ fn add_files_path_is_valid(path: &str) -> bool {
impl Treefile { impl Treefile {
/// The main treefile creation entrypoint. /// The main treefile creation entrypoint.
#[instrument(skip(workdir))]
fn new_boxed( fn new_boxed(
filename: &Path, filename: &Path,
basearch: Option<&str>, basearch: Option<&str>,
@ -462,6 +464,7 @@ impl Treefile {
) -> Result<Box<Treefile>> { ) -> Result<Box<Treefile>> {
let mut seen_includes = collections::BTreeMap::new(); let mut seen_includes = collections::BTreeMap::new();
let mut parsed = treefile_parse_recurse(filename, basearch, 0, &mut seen_includes)?; let mut parsed = treefile_parse_recurse(filename, basearch, 0, &mut seen_includes)?;
event!(Level::DEBUG, "parsed successfully");
parsed.config = parsed.config.substitute_vars()?; parsed.config = parsed.config.substitute_vars()?;
Treefile::validate_config(&parsed.config)?; Treefile::validate_config(&parsed.config)?;
let dfd = openat::Dir::open(utils::parent_dir(filename).unwrap())?; let dfd = openat::Dir::open(utils::parent_dir(filename).unwrap())?;