Use tracing (#174)

This commit is contained in:
Rebecca Turner
2022-11-16 13:43:57 -05:00
committed by Thomas Schönauer
parent d8add139e1
commit 41e2321b93
23 changed files with 175 additions and 131 deletions

View File

@@ -183,7 +183,7 @@ impl CommandExt for Command {
let err = TopgradeError::ProcessFailedWithOutput(program, output.status, stderr.into_owned());
let ret = Err(err).with_context(|| message);
log::debug!("Command failed: {ret:?}");
tracing::debug!("Command failed: {ret:?}");
ret
}
}
@@ -203,7 +203,7 @@ impl CommandExt for Command {
let (program, _) = get_program_and_args(self);
let err = TopgradeError::ProcessFailed(program, status);
let ret = Err(err).with_context(|| format!("Command failed: `{command}`"));
log::debug!("Command failed: {ret:?}");
tracing::debug!("Command failed: {ret:?}");
ret
}
}
@@ -239,6 +239,6 @@ fn format_program_and_args(cmd: &Command) -> String {
fn log(cmd: &Command) -> String {
let command = format_program_and_args(cmd);
log::debug!("Executing command `{command}`");
tracing::debug!("Executing command `{command}`");
command
}

View File

@@ -10,11 +10,11 @@ use color_eyre::eyre;
use color_eyre::eyre::Context;
use color_eyre::eyre::Result;
use directories::BaseDirs;
use log::debug;
use regex::Regex;
use serde::Deserialize;
use strum::{EnumIter, EnumString, EnumVariantNames, IntoEnumIterator};
use sys_info::hostname;
use tracing::debug;
use which_crate::which;
use crate::command::CommandExt;
@@ -352,12 +352,12 @@ impl ConfigFile {
};
let contents = fs::read_to_string(&config_path).map_err(|e| {
log::error!("Unable to read {}", config_path.display());
tracing::error!("Unable to read {}", config_path.display());
e
})?;
let mut result: Self = toml::from_str(&contents).map_err(|e| {
log::error!("Failed to deserialize {}", config_path.display());
tracing::error!("Failed to deserialize {}", config_path.display());
e
})?;
@@ -442,7 +442,7 @@ pub struct CommandLineArgs {
#[clap(long = "env", value_name = "NAME=VALUE", multiple_values = true)]
env: Vec<String>,
/// Output logs
/// Output debug logs. Alias for `--log-filter debug`.
#[clap(short = 'v', long = "verbose")]
pub verbose: bool,
@@ -480,6 +480,12 @@ pub struct CommandLineArgs {
/// Show the reason for skipped steps
#[clap(long = "show-skipped")]
show_skipped: bool,
/// Tracing filter directives.
///
/// See: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/struct.EnvFilter.html
#[clap(long, default_value = "info")]
pub log_filter: String,
}
impl CommandLineArgs {
@@ -494,6 +500,14 @@ impl CommandLineArgs {
pub fn env_variables(&self) -> &Vec<String> {
&self.env
}
pub fn tracing_filter_directives(&self) -> String {
if self.verbose {
"debug".into()
} else {
self.log_filter.clone()
}
}
}
/// Represents the application configuration
@@ -517,11 +531,11 @@ impl Config {
ConfigFile::read(base_dirs, opt.config.clone()).unwrap_or_else(|e| {
// Inform the user about errors when loading the configuration,
// but fallback to the default config to at least attempt to do something
log::error!("failed to load configuration: {}", e);
tracing::error!("failed to load configuration: {}", e);
ConfigFile::default()
})
} else {
log::debug!("Configuration directory {} does not exist", config_directory.display());
tracing::debug!("Configuration directory {} does not exist", config_directory.display());
ConfigFile::default()
};

View File

@@ -16,6 +16,6 @@ extern "system" fn handler(ctrl_type: DWORD) -> BOOL {
pub fn set_handler() {
if 0 == unsafe { SetConsoleCtrlHandler(Some(handler), TRUE) } {
log::error!("Cannot set a control C handler")
tracing::error!("Cannot set a control C handler")
}
}

View File

@@ -5,7 +5,7 @@ use std::process::{Child, Command, ExitStatus, Output};
use color_eyre::eyre;
use color_eyre::eyre::Result;
use log::debug;
use tracing::debug;
use crate::command::CommandExt;
use crate::error::DryRun;

View File

@@ -8,9 +8,7 @@ use clap::{crate_version, Parser};
use color_eyre::eyre::Context;
use color_eyre::eyre::{eyre, Result};
use console::Key;
use log::debug;
use log::LevelFilter;
use pretty_env_logger::formatted_timed_builder;
use tracing::debug;
use self::config::{CommandLineArgs, Config, Step};
use self::error::StepFailed;
@@ -43,6 +41,8 @@ fn run() -> Result<()> {
let opt = CommandLineArgs::parse();
install_tracing(&opt.tracing_filter_directives())?;
for env in opt.env_variables() {
let mut splitted = env.split('=');
let var = splitted.next().unwrap();
@@ -50,14 +50,6 @@ fn run() -> Result<()> {
env::set_var(var, value);
}
let mut builder = formatted_timed_builder();
if opt.verbose {
builder.filter(Some("topgrade"), LevelFilter::Trace);
}
builder.init();
if opt.edit_config() {
Config::edit(&base_dirs)?;
return Ok(());
@@ -537,3 +529,26 @@ fn main() {
}
}
}
pub fn install_tracing(filter_directives: &str) -> Result<()> {
use tracing_subscriber::fmt;
use tracing_subscriber::fmt::format::FmtSpan;
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;
use tracing_subscriber::EnvFilter;
let env_filter = EnvFilter::try_new(filter_directives)
.or_else(|_| EnvFilter::try_from_default_env())
.or_else(|_| EnvFilter::try_new("info"))?;
let fmt_layer = fmt::layer()
.with_target(false)
.with_span_events(FmtSpan::NEW | FmtSpan::CLOSE)
.without_time();
let registry = tracing_subscriber::registry();
registry.with(env_filter).with(fmt_layer).init();
Ok(())
}

View File

@@ -5,9 +5,9 @@ use crate::report::{Report, StepResult};
use crate::terminal::print_error;
use crate::{config::Step, terminal::should_retry};
use color_eyre::eyre::Result;
use log::debug;
use std::borrow::Cow;
use std::fmt::Debug;
use tracing::debug;
pub struct Runner<'a> {
ctx: &'a ExecutionContext<'a>,

View File

@@ -1,8 +1,8 @@
#![cfg(windows)]
use color_eyre::eyre::Result;
use log::{debug, error};
use std::{env::current_exe, fs, path::PathBuf};
use tracing::{debug, error};
pub struct SelfRenamer {
exe_path: PathBuf,

View File

@@ -1,14 +1,15 @@
use std::path::Path;
use std::process::Command;
use color_eyre::eyre::eyre;
use color_eyre::eyre::Context;
use color_eyre::eyre::Result;
use tracing::{debug, error, warn};
use crate::command::CommandExt;
use crate::error::{self, TopgradeError};
use crate::terminal::print_separator;
use crate::{execution_context::ExecutionContext, utils::require};
use log::{debug, error, warn};
use std::path::Path;
use std::process::Command;
// A string found in the output of docker for containers that weren't found in
// the docker registry. We use this to gracefully handle and skip containers

View File

@@ -9,8 +9,8 @@ use color_eyre::eyre::eyre;
use color_eyre::eyre::Context;
use color_eyre::eyre::Result;
use directories::BaseDirs;
use log::debug;
use tempfile::tempfile_in;
use tracing::debug;
use crate::command::{CommandExt, Utf8Output};
use crate::execution_context::ExecutionContext;

View File

@@ -8,9 +8,9 @@ use console::style;
use futures::stream::{iter, FuturesUnordered};
use futures::StreamExt;
use glob::{glob_with, MatchOptions};
use log::{debug, error};
use tokio::process::Command as AsyncCommand;
use tokio::runtime;
use tracing::{debug, error};
use crate::command::CommandExt;
use crate::execution_context::ExecutionContext;

View File

@@ -5,10 +5,10 @@ use std::path::PathBuf;
use std::process::Command;
use color_eyre::eyre::Result;
use log::debug;
#[cfg(target_os = "linux")]
use nix::unistd::Uid;
use semver::Version;
use tracing::debug;
use crate::command::CommandExt;
use crate::executor::RunType;

View File

@@ -3,7 +3,7 @@ use std::process::Command;
use color_eyre::eyre::Result;
use ini::Ini;
use log::{debug, warn};
use tracing::{debug, warn};
use crate::command::CommandExt;
use crate::error::{SkipStep, TopgradeError};

View File

@@ -4,9 +4,9 @@ use crate::executor::RunType;
use crate::terminal::{print_separator, prompt_yesno};
use crate::{utils::require, Step};
use color_eyre::eyre::Result;
use log::debug;
use std::fs;
use std::process::Command;
use tracing::debug;
pub fn run_macports(ctx: &ExecutionContext) -> Result<()> {
require("port")?;

View File

@@ -10,7 +10,7 @@ use color_eyre::eyre::Result;
use directories::BaseDirs;
use home;
use ini::Ini;
use log::debug;
use tracing::debug;
use crate::error::SkipStep;
use crate::execution_context::ExecutionContext;

View File

@@ -3,7 +3,7 @@ use std::path::Path;
use std::{ffi::OsStr, process::Command};
use color_eyre::eyre::Result;
use log::debug;
use tracing::debug;
use crate::command::CommandExt;
use crate::execution_context::ExecutionContext;

View File

@@ -3,9 +3,9 @@ use std::process::Command;
use std::{fmt::Display, rc::Rc, str::FromStr};
use color_eyre::eyre::Result;
use log::{debug, error};
use regex::Regex;
use strum::EnumString;
use tracing::{debug, error};
use crate::command::CommandExt;
use crate::execution_context::ExecutionContext;

View File

@@ -4,9 +4,9 @@ use crate::command::CommandExt;
use crate::config::Step;
use crate::terminal::print_separator;
use crate::{execution_context::ExecutionContext, utils::require};
use log::debug;
use std::path::Path;
use std::{path::PathBuf, process::Command};
use tracing::debug;
fn list_toolboxes(toolbx: &Path) -> Result<Vec<String>> {
let output = Command::new(toolbx)

View File

@@ -9,12 +9,12 @@ use crate::{
utils::{require, PathExt},
};
use directories::BaseDirs;
use log::debug;
use std::path::PathBuf;
use std::{
io::{self, Write},
process::Command,
};
use tracing::debug;
const UPGRADE_VIM: &str = include_str!("upgrade.vim");

View File

@@ -4,7 +4,7 @@ use std::process::Command;
use color_eyre::eyre::Result;
use directories::BaseDirs;
use log::debug;
use tracing::debug;
use walkdir::WalkDir;
use crate::command::CommandExt;

View File

@@ -12,9 +12,9 @@ use color_eyre::eyre;
use color_eyre::eyre::Context;
use console::{style, Key, Term};
use lazy_static::lazy_static;
use log::{debug, error};
#[cfg(target_os = "macos")]
use notify_rust::{Notification, Timeout};
use tracing::{debug, error};
#[cfg(windows)]
use which_crate::which;
@@ -105,7 +105,7 @@ impl Terminal {
command.args(["-a", "Topgrade", "Topgrade"]);
command.arg(message.as_ref());
if let Err(err) = command.output_checked() {
log::error!("{err:?}");
tracing::error!("{err:?}");
}
}
}

View File

@@ -1,11 +1,11 @@
use crate::error::SkipStep;
use color_eyre::eyre::Result;
use log::{debug, error};
use std::env;
use std::ffi::OsStr;
use std::fmt::Debug;
use std::path::{Path, PathBuf};
use tracing::{debug, error};
pub trait PathExt
where