Move tracing setup into a separate module.

No code changes here yet.
This commit is contained in:
Nick Mathewson 2022-01-07 08:41:13 -05:00
parent aa690a0c80
commit 736763fb51
2 changed files with 49 additions and 43 deletions

View File

@ -90,20 +90,18 @@
mod exit;
mod process;
mod proxy;
mod trace;
use std::sync::Arc;
use arti_client::{TorClient, TorClientConfig};
use arti_config::{ArtiConfig, LoggingConfig};
use arti_config::ArtiConfig;
use tor_rtcompat::{Runtime, SpawnBlocking};
use anyhow::Result;
use clap::{App, AppSettings, Arg, SubCommand};
use std::path::PathBuf;
use tracing::{info, warn};
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::prelude::*;
use tracing_subscriber::{fmt, registry, EnvFilter};
/// Run the main loop of the proxy.
async fn run<R: Runtime>(
@ -125,44 +123,6 @@ async fn run<R: Runtime>(
)
}
/// As [`EnvFilter::new`], but print a message if any directive in the
/// log is invalid.
fn filt_from_str_verbose(s: &str, source: &str) -> EnvFilter {
match EnvFilter::try_new(s) {
Ok(s) => s,
Err(_) => {
eprintln!("Problem in {}:", source);
EnvFilter::new(s)
}
}
}
/// Set up logging
fn setup_logging(config: &LoggingConfig, cli: Option<&str>) {
let env_filter =
match cli.map(|s| filt_from_str_verbose(s, "--log-level command line parameter")) {
Some(f) => f,
None => filt_from_str_verbose(
config.trace_filter.as_str(),
"trace_filter configuration option",
),
};
let registry = registry().with(fmt::Layer::default()).with(env_filter);
if config.journald {
#[cfg(feature = "journald")]
if let Ok(journald) = tracing_journald::layer() {
registry.with(journald).init();
return;
}
#[cfg(not(feature = "journald"))]
warn!("journald logging was selected, but arti was built without journald support.");
}
registry.init();
}
fn main() -> Result<()> {
let dflt_config = arti_config::default_config_file().unwrap_or_else(|| "./config.toml".into());
@ -242,7 +202,7 @@ fn main() -> Result<()> {
let config: ArtiConfig = cfg.try_into()?;
setup_logging(config.logging(), matches.value_of("loglevel"));
trace::setup_logging(config.logging(), matches.value_of("loglevel"));
if let Some(proxy_matches) = matches.subcommand_matches("proxy") {
let socks_port = match (

46
crates/arti/src/trace.rs Normal file
View File

@ -0,0 +1,46 @@
//! Configure tracing subscribers for Arti
use arti_config::LoggingConfig;
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::prelude::*;
use tracing_subscriber::{fmt, registry, EnvFilter};
/// As [`EnvFilter::new`], but print a message if any directive in the
/// log is invalid.
fn filt_from_str_verbose(s: &str, source: &str) -> EnvFilter {
match EnvFilter::try_new(s) {
Ok(s) => s,
Err(_) => {
eprintln!("Problem in {}:", source);
EnvFilter::new(s)
}
}
}
/// Set up logging
pub(crate) fn setup_logging(config: &LoggingConfig, cli: Option<&str>) {
let env_filter =
match cli.map(|s| filt_from_str_verbose(s, "--log-level command line parameter")) {
Some(f) => f,
None => filt_from_str_verbose(
config.trace_filter.as_str(),
"trace_filter configuration option",
),
};
let registry = registry().with(fmt::Layer::default()).with(env_filter);
if config.journald {
#[cfg(feature = "journald")]
if let Ok(journald) = tracing_journald::layer() {
registry.with(journald).init();
return;
}
#[cfg(not(feature = "journald"))]
tracing::warn!(
"journald logging was selected, but arti was built without journald support."
);
}
registry.init();
}