Browse Source

Log deamon and coordinator output to files

Logs the deamon output to `out/dora-daemon.txt` and the coordinator output to `out/dora-coordinator.txt`.
tags/v0.3.5-rc0
Philipp Oppermann 1 year ago
parent
commit
b7f21dbd4a
Failed to extract signature
2 changed files with 40 additions and 25 deletions
  1. +2
    -2
      binaries/cli/src/main.rs
  2. +38
    -23
      libraries/extensions/telemetry/tracing/src/lib.rs

+ 2
- 2
binaries/cli/src/main.rs View File

@@ -252,14 +252,14 @@ fn run() -> eyre::Result<()> {
#[cfg(feature = "tracing")]
match args.command {
Command::Daemon { quiet, .. } => {
set_up_tracing_opts("dora-daemon", !quiet)
set_up_tracing_opts("dora-daemon", !quiet, true)
.context("failed to set up tracing subscriber")?;
}
Command::Runtime => {
// Do not set the runtime in the cli.
}
Command::Coordinator { quiet, .. } => {
set_up_tracing_opts("dora-coordinator", !quiet)
set_up_tracing_opts("dora-coordinator", !quiet, true)
.context("failed to set up tracing subscriber")?;
}
_ => {


+ 38
- 23
libraries/extensions/telemetry/tracing/src/lib.rs View File

@@ -3,6 +3,8 @@
//! This module init a tracing propagator for Rust code that requires tracing, and is
//! able to serialize and deserialize context that has been sent via the middleware.

use std::path::Path;

use eyre::Context as EyreContext;
use tracing::metadata::LevelFilter;
use tracing_subscriber::{
@@ -14,23 +16,38 @@ use tracing_subscriber::Registry;
pub mod telemetry;

pub fn set_up_tracing(name: &str) -> eyre::Result<()> {
set_up_tracing_opts(name, true)
set_up_tracing_opts(name, true, false)
}

pub fn set_up_tracing_opts(name: &str, stdout: bool) -> eyre::Result<()> {
let stdout_filter = if stdout {
LevelFilter::TRACE
} else {
LevelFilter::OFF
};
// Filter log using `RUST_LOG`. More useful for CLI.
let env_filter = EnvFilter::from_default_env().or(LevelFilter::WARN);
let stdout_log = tracing_subscriber::fmt::layer()
.pretty()
.with_filter(stdout_filter)
.with_filter(env_filter);

let registry = Registry::default().with(stdout_log);
pub fn set_up_tracing_opts(name: &str, stdout: bool, file: bool) -> eyre::Result<()> {
let mut layers = Vec::new();

if stdout {
// Filter log using `RUST_LOG`. More useful for CLI.
let env_filter = EnvFilter::from_default_env().or(LevelFilter::WARN);
let layer = tracing_subscriber::fmt::layer()
.pretty()
.with_filter(env_filter);
layers.push(layer.boxed());
}

if file {
let out_dir = Path::new("out");
std::fs::create_dir_all(out_dir).context("failed to create `out` directory")?;
let path = out_dir.join(format!("{name}.txt"));
let file = std::fs::OpenOptions::new()
.create(true)
.append(true)
.open(path)
.context("failed to create log file")?;
// Filter log using `RUST_LOG`. More useful for CLI.
let layer = tracing_subscriber::fmt::layer()
.with_ansi(false)
.with_writer(file)
.with_filter(LevelFilter::INFO);
layers.push(layer.boxed());
}

if let Some(endpoint) = std::env::var_os("DORA_JAEGER_TRACING") {
let endpoint = endpoint
.to_str()
@@ -38,13 +55,11 @@ pub fn set_up_tracing_opts(name: &str, stdout: bool) -> eyre::Result<()> {
let tracer = crate::telemetry::init_jaeger_tracing(name, endpoint)
.wrap_err("Could not instantiate tracing")?;
let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
let subscriber = registry.with(telemetry);
tracing::subscriber::set_global_default(subscriber).context(format!(
"failed to set tracing global subscriber for {name}"
))
} else {
tracing::subscriber::set_global_default(registry).context(format!(
"failed to set tracing global subscriber for {name}"
))
layers.push(telemetry.boxed());
}

let registry = Registry::default().with(layers);
tracing::subscriber::set_global_default(registry).context(format!(
"failed to set tracing global subscriber for {name}"
))
}

Loading…
Cancel
Save